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

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


推荐阅读
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • Android 渐变圆环加载控件实现
    本文介绍了如何在 Android 中创建一个自定义的渐变圆环加载控件,该控件已在多个知名应用中使用。我们将详细探讨其工作原理和实现方法。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 尽管使用TensorFlow和PyTorch等成熟框架可以显著降低实现递归神经网络(RNN)的门槛,但对于初学者来说,理解其底层原理至关重要。本文将引导您使用NumPy从头构建一个用于自然语言处理(NLP)的RNN模型。 ... [详细]
  • 本文介绍如何在 Android 中通过代码模拟用户的点击和滑动操作,包括参数说明、事件生成及处理逻辑。详细解析了视图(View)对象、坐标偏移量以及不同类型的滑动方式。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 深入理解Tornado模板系统
    本文详细介绍了Tornado框架中模板系统的使用方法。Tornado自带的轻量级、高效且灵活的模板语言位于tornado.template模块,支持嵌入Python代码片段,帮助开发者快速构建动态网页。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 本文介绍如何使用 Python 提取和替换 .docx 文件中的图片。.docx 文件本质上是压缩文件,通过解压可以访问其中的图片资源。此外,我们还将探讨使用第三方库 docx 的方法来简化这一过程。 ... [详细]
  • 本文详细介绍了 Java 中 org.apache.xmlbeans.SchemaType 类的 getBaseEnumType() 方法,提供了多个代码示例,并解释了其在不同场景下的使用方法。 ... [详细]
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社区 版权所有