热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于移动平台的会展导游系统APP设计与实现的技术介绍与需求分析

本文介绍了基于移动平台的会展导游系统APP的设计与实现过程。首先,对会展经济和移动互联网的概念进行了简要介绍,并阐述了将会展引入移动互联网的意义。接着,对基础技术进行了介绍,包括百度云开发环境、安卓系统和近场通讯技术。然后,进行了用户需求分析和系统需求分析,并提出了系统界面运行流畅和第三方授权等需求。最后,对系统的概要设计进行了详细阐述,包括系统前端设计和交互与原型设计。本文对基于移动平台的会展导游系统APP的设计与实现提供了技术支持和需求分析。

目录
摘 要 I
Abstract II
第一章 绪论 3
1.1 会展经济 3
1.1.1 需求背景 3
1.1.2 面临的问题 3
1.2 移动互联网 4
1.2.1 移动互联网概述 4
1.2.2 将会展驶入移动互联网快车道 5
1.3 项目意义 5
1.4 系统概要介绍 6
第二章 基础技术介绍 7
2.1 百度云开发环境 7
2.1.1 百度应用引擎(BAE) 7
2.1.2 百度LBS云 7
2.1.3 百度个人云存储(PCS) 9
2.2 安卓(Android)系统简介 9
2.2.1 应用程序 10
2.2.2 应用程序框架 10
2.2.3 系统运行库 10
2.3 近场通讯技术(NFC) 11
2.4 会展导游系统架构概述和运行原理 12
2.5 小结 12
第三章 需求分析 14
3.1 用户需求分析 14
3.1.1 用例1 14
3.1.2 用例2 15
3.1.3 用例3 15
3.1.4 用例4 16
3.1.5 用例5 16
3.1.6 用例6 17
3.2 系统需求分析 17
3.2.1 系统界面运行流畅 17
3.2.2 第三方授权 17
3.3 小结 17
第四章 系统概要设计 18
4.1 系统前端设计 18
4.1.1 交互与原型设计 18
4.1.2 瀑布流布局 22
4.2 系统后端设计 22
4.2.1 系统模块设计 22
4.3 系统视图层设计 24
4.3.1 展会列表界面刷新流程 24
4.3.2 展会概要界面刷新流程 25
4.3.3 展品详情界面刷新流程 26
4.4 小结 26
第五章 系统详细设计与实现 27
5.1 视图层详细设计与实现 27
5.1.1 展会列表首页的详细设计与实现 27
5.1.2 展会详情页的详细设计与实现 28
5.1.3 展品详情页的详细设计与实现 29
5.2 逻辑层详细设计与实现 30
5.2.1 联系人模块详细设计与实现 30
5.3 关键问题及解决方案 32
5.3.1 瀑布流图片的设计与实现 32
5.3.2 资源加载任务的设计与实现 34
5.3.3 异步加载线程的设计与实现 34
5.4 小结 36
第六章 总结与展望 37
6.1 总结 37
6.2 展望 37
参考文献 38
致谢 39
第三章需求分析
3.1用户需求分析
本节主要介绍用户需求。从用户观展前、观展中、观展后几个场景,梳理分析用户的需求点。
3.1.1用例1
用户希望获得所在城市的展会信息。
当用户有参展的兴趣时,希望通过定位功能查找当地展馆举办的展会信息,并希望系统提供展会的相关内容作为决策的依据。比如说车展,用户可以看到最新或者是热门的车型,又或者是车模的照片,吸引用户决策去参加这个展会。
3.1.2用例2
用户希望在参展的过程中,能获得更多的展品的介绍,必要时能获取展品优惠券。
目前参展商的宣传方式仍以传单和现场讲解为主,大屏滚动播出宣传视频也作为一种宣传手段使用。可是这些方式存在天生的缺陷,传单所承载的内容不够详尽,而现场的讲解或宣传视频,让晚到的用户无法知晓到全部内容。
所以,用户希望可以获得更多的展品介绍,无论是文字、图片、视频或者是其他形式的附件。当用户看到某些展品的介绍后,如果产生了购买的兴趣,希望能够获得展品的优惠券,以便用户在购买时享受到优惠。
3.1.3用例3
用户希望将感兴趣的展品的电子介绍保存至百度云。
展品的详情介绍,包含了文字介绍,但都是概要式的说明,详情中还包含了更详尽内容的富文本附件,用户对展品感兴趣时,可以将附件保存至百度云,长久的保存起来,不易丢失。
这种保存附件的形式,解放了用户。用户不需要再担心在展会看中某一心仪的展品后,回家后就忘记其名称;或者是不再需要在逛展会的时候,拿着五花八门的传单介绍。

3.1.4用例4
用户在观展其间,希望能在饭点在展馆周边找到吃饭的地方。
展馆建筑面积比较大,一般坐落在城市的近郊,四周较为荒凉,而且因为展馆更注重自身的建设,所以周边的餐饮等配套设施,有所不足,比如说餐厅的地点距展台较远,或者较偏僻,位于地下层或者是在附近某栋建筑较多。而对于异地游客,陌生的环境对于他们而言,更难找到目的地。
所以,用户希望能够在饭点,在展馆周边找到餐厅。餐厅应能在几个维度作分类查找,比如说距离、品味、价格等。
3.1.5用例5
用户在观展其间,会认识不同的人。比如说销售代表会认识客户,用户在对某件展品产生购买意向时,也会认识某些销售代表;摄影师对在展会其间认识了一些影友;用户无意见也可能搭讪某位车模。当他们需要相互留联系方式时,希望能够快捷方便的交换联系方式信息,因为他们可能在赶车时才想起留联系方式,要求交换的方便更快捷。
3.1.6用例6
用户在看到某件有趣的产品或者是遇见某件趣事时,希望能通过微博与朋友们分享。
3.2系统需求分析
本节主要介绍系统需求,涉及第三方服务授权和系统性能等需求。
3.2.1系统界面运行流畅
系统向用户展示展会、展品的概况,需加载大量的图片,系统使用资源较多,应使用缓存、多线程技术绘制用户界面,保证界面的流畅性。
3.2.2第三方授权
系统引入的第三方服务,均需获得用户授权能可使用,引入的第三方服务包括百度云个人云存储(PCS)、新浪微博开放服务。百度云LBS云服务,需要应用申请权限用户无需授权。
3.3小结
系统的需求分析,充分基于用户在参展的前、中、后的活动进行,是一次合理的分析。它包括参展前的决策,本文转载自http://www.biyezuopin.vip/onews.asp?id=14557系统需提供富媒体信息供用户参考,帮助决策是否参展;参展中,使用近场识别技术方便用户识别展品、使用百度个人云存储服务持久化保存展品介绍。此外,还挖掘出用户在参展中有查找附近餐饮的需求和交换联系人信息的需求。

/*** 这是首页* 顶部可浏览展览会图片* 下面可以对应信息* 能查看详情*/package com.scut.exguide.ui;import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.oauth.BaiduOAuth;
import com.baidu.oauth.BaiduOAuth.BaiduOAuthResponse;
import com.example.exguide.R;import com.scut.exguide.listener.MyLocationListener;
import com.scut.exguide.listener.WeiboOAuthListener;
import com.scut.exguide.mulithread.GetExhList;
import com.scut.exguide.mulithread.LoaderImageTask;
import com.scut.exguide.utility.AccessTokenKeeper;
import com.scut.exguide.utility.Constant;
import com.scut.exguide.utility.DBUtility;
import com.scut.exguide.utility.Location;
import com.scut.exguide.utility.MyActivity;
import com.scut.exguide.utility.TaskHandler;
import com.scut.exguide.utility.ToastShow;
import com.weibo.sdk.android.Oauth2AccessToken;
import com.weibo.sdk.android.Weibo;import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.StrictMode;
import android.app.ActionBar;
import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ImageView;
import android.widget.Toast;public class HomeActivity extends Activity implements MyActivity {// 菜单、VIEW等UIprivate ActionBar mActionBar;// 主页的actionbarprivate Menu mMenu;private ExhListView mExhListView;// 定位APIpublic LocationClient mLocationClient = null;public BDLocationListener myListener;public static Location myLocation;// 全局标识的地理位置public String myPoint = "当前位置为:";// 当前位置public LoaderImageTask LoaderImage1 = new LoaderImageTask();public LoaderImageTask LoaderImage2 = new LoaderImageTask();// PCS APIBaiduOAuth oauthClient = null;public static String mbOauth = null;// AcessTokenpublic Weibo mWeibio;public static Oauth2AccessToken mOauth2AccessToken;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// setContentView(R.layout.activity_home);ToastShow.setActivity(this);mExhListView = new ExhListView(this);setContentView(mExhListView.getView());SQLiteDatabase db = openOrCreateDatabase(Constant.dbname, MODE_WORLD_WRITEABLE, null);DBUtility.setDb(db);DBUtility.CreateDB();LoaderImage1.start();LoaderImage2.start();if (Build.VERSION.SDK_INT >= 11) {StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().detectLeakedClosableObjects().penaltyLog().penaltyDeath().build());}initialLocService();intialActionbar();}/*** 初始化actionbar*/private void intialActionbar() {mActionBar = getActionBar();// mActionBar.setDisplayHomeAsUpEnabled(true);// mActionBar.setBackgroundDrawable(getResources().getDrawable(R.drawable.title_bg_trans));mActionBar.show();}/*** 初始化定位服务*/private void initialLocService() {mLocationClient = new LocationClient(getApplicationContext());myListener = new MyLocationListener(this);LocationClientOption option = new LocationClientOption();option.setAddrType("all");// 返回的定位结果包含地址信息option.setCoorType("bd09ll");// 返回的定位结果是百度经纬度,默认值gcj02option.disableCache(true);// 禁止启用缓存定位mLocationClient.setLocOption(option);mLocationClient.registerLocationListener(myListener);mLocationClient.start();if (mLocationClient != null && mLocationClient.isStarted())mLocationClient.requestLocation();elseLog.d("LocSDK3", "locClient is null or not started");// mLocationClient.}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.option, menu);mMenu = menu;mMenu.getItem(0).setTitle(myPoint);return true;}@Overrideprotected void onStart() {// TODO Auto-generated method stubsuper.onStart();}/*** actionbar的菜单判断*/@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// TODO Auto-generated method stubswitch (item.getOrder()) {case 1: {// 定位}break;case 2: {// 设置绑定PCSGotoPcsOAuth();}break;case 3: {// 设置绑定WeiobmWeibio = Weibo.getInstance(Constant.APP_KEY,Constant.REDIRECT_URL, Constant.SCOPE);mWeibio.anthorize(HomeActivity.this, new WeiboOAuthListener(mOauth2AccessToken));AccessTokenKeeper.keepAccessToken(getApplicationContext(), mOauth2AccessToken);}break;case 4: {finish();}break;}return super.onOptionsItemSelected(item);}public Handler mhandler = new Handler() {@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubswitch (msg.what) {case Constant.SetLoaction: {myLocation = (Location) msg.obj;String l = myPoint + myLocation.City;mMenu.getItem(0).setTitle(l);GetExhList asyGet = new GetExhList(mExhListView);String city = String.copyValueOf(myLocation.City.toCharArray(),0, myLocation.City.length() - 1);String path = Constant.RequestExhlistUrl + "/city/" + city;asyGet.execute(path);}break;case Constant.UpdateUI: {TaskHandler task = (TaskHandler) msg.obj;Bitmap bp = LoaderImageTask.PicsMap.get(task.getPath());// ImageView iv = (ImageView) LoaderImageTask.ViewsMap.get(task// .getPath());task.Update(bp);// iv.setImageBitmap(bp);Log.d("TEST", "设置");}break;}super.handleMessage(msg);}};public String getTag() {// TODO Auto-generated method stubreturn null;}public void GotoPcsOAuth() {BaiduOAuth oauthClient = new BaiduOAuth();oauthClient.startOAuth(this, Constant.mbApiKey, new String[] { "basic","netdisk" }, new BaiduOAuth.OAuthListener() {@Overridepublic void onException(String msg) {Toast.makeText(getApplicationContext(), "Login failed " + msg,Toast.LENGTH_SHORT).show();}@Overridepublic void onComplete(BaiduOAuthResponse response) {if (null != response) {mbOauth = response.getAccessToken();Toast.makeText(getApplicationContext(),"Token: " + mbOauth + " User name:"+ response.getUserName(),Toast.LENGTH_SHORT).show();}}@Overridepublic void onCancel() {Toast.makeText(getApplicationContext(), "Login cancelled",Toast.LENGTH_SHORT).show();}});}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubLoaderImageTask.Toggle();mLocationClient.stop();super.onDestroy();}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {// TODO Auto-generated method stubswitch (event.getKeyCode()) {case KeyEvent.KEYCODE_BACK: {}}return false;}@Overridepublic void Update(Object... param) {// TODO Auto-generated method stubMessage msg = new Message();msg.what = Constant.UpdateUI;msg.obj = param[0];mhandler.sendMessage(msg);}
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


推荐阅读
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Java自带的观察者模式及实现方法详解
    本文介绍了Java自带的观察者模式,包括Observer和Observable对象的定义和使用方法。通过添加观察者和设置内部标志位,当被观察者中的事件发生变化时,通知观察者对象并执行相应的操作。实现观察者模式非常简单,只需继承Observable类和实现Observer接口即可。详情请参考Java官方api文档。 ... [详细]
  • Python实现变声器功能(萝莉音御姐音)的方法及步骤
    本文介绍了使用Python实现变声器功能(萝莉音御姐音)的方法及步骤。首先登录百度AL开发平台,选择语音合成,创建应用并填写应用信息,获取Appid、API Key和Secret Key。然后安装pythonsdk,可以通过pip install baidu-aip或python setup.py install进行安装。最后,书写代码实现变声器功能,使用AipSpeech库进行语音合成,可以设置音量等参数。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
author-avatar
白珍茜登陆_585
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有