热门标签 | 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);}
}

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


推荐阅读
  • 本文探讨了如何在日常工作中通过优化效率和深入研究核心技术,将技术和知识转化为实际收益。文章结合个人经验,分享了提高工作效率、掌握高价值技能以及选择合适工作环境的方法,帮助读者更好地实现技术变现。 ... [详细]
  • 本文详细介绍了如何构建一个高效的UI管理系统,集中处理UI页面的打开、关闭、层级管理和页面跳转等问题。通过UIManager统一管理外部切换逻辑,实现功能逻辑分散化和代码复用,支持多人协作开发。 ... [详细]
  • 深入理解Java中的volatile、内存屏障与CPU指令
    本文详细探讨了Java中volatile关键字的作用机制,以及其与内存屏障和CPU指令之间的关系。通过具体示例和专业解析,帮助读者更好地理解多线程编程中的同步问题。 ... [详细]
  • 本文探讨了 Objective-C 中的一些重要语法特性,包括 goto 语句、块(block)的使用、访问修饰符以及属性管理等。通过实例代码和详细解释,帮助开发者更好地理解和应用这些特性。 ... [详细]
  • 百度服务再次遭遇技术问题,疑似DNS解析故障
    近日晚间,百度多项在线服务出现加载异常,包括移动端搜索在内的多个功能受到影响。初步迹象表明,问题可能与DNS服务器解析有关。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 作者:守望者1028链接:https:www.nowcoder.comdiscuss55353来源:牛客网面试高频题:校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • 本文详细介绍了 Java 中 org.apache.xmlbeans.SchemaType 类的 getBaseEnumType() 方法,提供了多个代码示例,并解释了其在不同场景下的使用方法。 ... [详细]
  • 本文详细介绍了如何在Ubuntu系统中下载适用于Intel处理器的64位版本,涵盖了不同Linux发行版对64位架构的不同命名方式,并提供了具体的下载链接和步骤。 ... [详细]
  • 本文详细记录了在银河麒麟操作系统和龙芯架构上使用 Qt 5.15.2 进行项目打包时遇到的问题及解决方案,特别关注于 linuxdeployqt 工具的应用。 ... [详细]
  • Scala 实现 UTF-8 编码属性文件读取与克隆
    本文介绍如何使用 Scala 以 UTF-8 编码方式读取属性文件,并实现属性文件的克隆功能。通过这种方式,可以确保配置文件在多线程环境下的一致性和高效性。 ... [详细]
  • 配置Windows操作系统以确保DAW(数字音频工作站)硬件和软件的高效运行可能是一个复杂且令人沮丧的过程。本文提供了一系列专业建议,帮助你优化Windows系统,确保录音和音频处理的流畅性。 ... [详细]
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社区 版权所有