基于Android的无忧出行应用软件设计与实现
2018-09-04赖盛鑫高建华
赖盛鑫 高建华
摘 要:移动互联网时代,用户可通过手机随时随地从互联网上获取信息。基于安卓手机系统和百度地图软件开发工具包,分析人们生活出行时的各种需求,充分运用九宫格手势密码、Java语言和SharePreference等基本技术,对无忧出行应用软件进行功能模块设计。该系统实现了二维码电子名片取代传统名片的发放,具备查询全国城市天气预报和公交车路线功能,能调用百度地图SDK获得周围商家数据信息。应用实验表明,该软件与同类APP相比,更加注重用户体验,使用方便,具有较强的通用性。
关键词: 安卓应用程序;百度地图;二维码名片;天气预报
DOI:10.11907/rjdk.181061
中图分类号:TP319
文献标识码:A 文章编号:1672-7800(2018)006-0106-05
Abstract:The advent of the era of mobile Internet, the user through the phone can access to real-time information from the Internet at any time, anywhere. The article based on the android mobile phone system software development kit and Baidu map, analyzes the diverse needs of people travel life, uses of the Jiugongge gesture password, Java language, SharePreference and other basic theory of the functional module design. The application achieves a two-dimensional code electronic business card to replace the traditional business card issuance in the technical innovation; Completed the query the national city weather forecast and the function of the bus route query; Call Baidu map SDK to obtain merchants data, and obtain corresponding stores information such as the telephone and so on. The application experiment shows that the software, compared with the similar APP on the market, pays more attention to user experience, and easy to use, strong commonality.
Mobile phone users can obtain information from Internet anywhere at any time in this mobile Internet era. People's various travel needs are analyzed by Android mobile system and Baidu Map kit. Technologies including Sudoku gesture codes, Java language and SharePreference are employed for function module design of worry-free trip application software. Traditional business cards are replaced by two-dimensional code eletrical business cards in the APP. It also provides nationwide weather report and bus route query and employs Baidu Map SDK to obtain nearby merchants' information. According to the usability testing, the APP is more focused on users' experience, user-freindly and of stronger commonality compared with other similar APPs.
Key Words:Android application (App); Baidu map; QR-core card; weather forecast
0 引言
随着信息技术的迅猛发展,移动设备已成为日常交流的工具[1]。Android平台凭借系统版更新周期短、开源等优势,吸引越来越多的开发者或企业参与到手机应用开发中,开发出了众多对生活出行非常实用的应用软件,如支付宝、大众点评、美团、百度地图等,但这些软件功能过于臃肿且植入广告众多,运行速度慢,用户体验不佳。鉴于以上不足,本文综合现有研究成果[2-4],利用Android studio工具环境[5-6],充分研究平台测试[7-8]、安全[9]等方面因素,設计并实现了一款更实用的系统软件。
系统实现如下功能:九宫格手势解锁密码、电子二维码名片生成、城市天气查询、公交线路查询、搜索用户所在地点周围2km内所有商家和公共设施并显示路线地图。
(1)任何拥有Android智能手机的用户都可以使用该应用软件,为出行生活提供畅行无忧的贴心指导。
(2)九宫格手势密码设置,不仅提供独一无二的软件用户使用权,还能根据用户的喜好设置解锁图案,在用户手机上实现创建、修改、找回密码功能,节省邮箱等验证找回密码的时间,增强了用户体验感,提高了软件使用的安全性。
(3)二维码电子名片取代了传统的纸质名片,方便快捷,既顺应移动互联网电子二维码盛行的潮流,又符合当下低碳环保理念。
(4)用户可以随时随地查看全国各主要城市未来3天天气情况,全国各主要城市公交车线路情况,为人们提供出行参考。
(5)用户可查询附近所有的商家和公共设施详情,并通过地图规划选择最优路径。
(6)主页面周围商家图片生动形象,UI界面运行流畅,采用主流的主页切换模式,无商业广告信息。
1 相关理论与关键技术
1.1 九宫格手势密码原理
本系统通过一个九宫格图案进行登录密码设置。九宫格图案是一个3行3列的二维矩阵[10],当用户指尖划过一个数字时,系统就记录了该数字,随后将该数字利用SharePreference存储技术保存到手机内存,在登录前进行数据比对验证。同类APP中大多建立后端数据库调取数据,在网络条件较差时常常出现调取失败现象,本文采用的技术与同类APP相比,提高了运行速度,避免了APP程序崩溃的风险。
通常情况下,绘制一个九宫格图案最短的只绘制一个点,最长可以绘制连接9个点。根据数学排列组合原理可知,如果从只绘制一个点到9个点共有A9-9+A8-9+A7-9+A6-9+A5-9+A4-9+A3-9+A2-9+A1-9=986 409种绘制方法,增强了安全性。
1.2 二维码生成原理
二维码(Two-dimension code)是用矩阵符号组成的[11],并以特定的几何图形按一定规律在平面上(二维方向)分布的黑白相间的图形记录符号[12]。二维码主要分为堆叠式/行排式和矩阵式[13]。矩阵式中的QR-CODE,即快速回复二维码,是目前最为流行的一种。QR-CODE具有存储信息量大、识读速度快、纠错能力强等优点,广泛应用于支付生活等领域。
本文设计的电子二维码即采用QR-CODE,对其编码并加以改进,通过识别并存储用户输入的数据字符,从而转换成二维数组。然后根据编码规范,使用绘图功能绘制二维码,最后生成标准的QR-CODE。
1.3 数据调取关键技术
1.3.1 百度地图API及定位
百度地图API主页[14]提供给开发者各种资源,其中百度地图Android开发功能板块提供了地图、定位、导航以及全景SDK。
手机定位分为4种方式:①卫星定位(GPS、北斗、伽利略、Glonass);②移动基站定位;③WiFi辅助定位;④AGPS定位[15]。本文运用前3种定位技术实现本地定位:获本地天气和POI搜索必须先获取用户所在地的经纬度,可导入百度地图相关应用开发包(百度地图API官网可下载),然后通过运营商的数据流量、WiFi方式,调用开发包提供的类方法定位出经纬度。
1.3.2 百度地图POI搜索及路径规划技术
百度POI(Point of Interest:兴趣点)搜索:支持周边检索、区域检索和城市内检索。
周边检索:以某一点(用户所在地)为中心,指定距离为半径(本文采用2km),根据用户输入的关键词进行POI检索,可获得附近的POI,如超市、餐厅、ATM、KTV等信息;区域检索:在指定矩形区域内根据关键词进行POI检索;城市内检索:根据用户输入的关键字进行POI检索;POI详情检索:根据POI的ID信息检索该兴趣点详情。
本系统可对公交详细信息进行查询:公交换乘查询:根据起、终点进行线路规划(支持设置途经点);步行路径检索:支持步行路径规划。
1.4 即时获取近3天天气预报
(1)获取定位地址天气:高德地图虽然提供了获取天气预报接口数据信息,但更新十分缓慢或几乎不更新。考虑到百度地图地理位置反编码时和原有开发类包发生不兼容的现象,在技术实现过程中使用高德地图天气预报功能获取用户城市中文名称,根据高德地图获取到的中文城市名再到新浪天气平台获取详细天气信息。
(2)获取其它城市天气:从中国天气网接口获得省份及城市名称,从而获取查询的城市天气信息。
2 系统软件设计
2.1 MVC设计模式
Android界面布局方式分为两种:①直接在程序代码中对UI(User Interface:用户界面)进行布局;②依据MVC(Model View Controller:即模型-视图-控制器)模式进行设计(目前因其扩展性较好成为主流的布局方法)。
本文设计的系统工程文件中有个res包,内容包括图片、颜色、布局文件等资源,在不同的xml分布着各式各样的组件,各组件间具有严格的层次关系。布局完成之后在代码中利用setContentView()方法可以将xml加载到程序中,利用代码控制页面。图1是系统用到的所有XML文件。
以上每一个xml并不都对应一个页面,有的实现一条分割线作用,有的只是实现下拉加载作用等。在功能设计上,以找回密码页activity_findpwd.xml为例说明。
图3为人们熟悉的用户交互页面,而图2是图3的布局代码块,从代码映射到布局,综合运用了Android特色布局技術及特色组件功能。想了解更多的布局方式和组件请查看文献[16]。
2.2 系统程序架构
本文设计的Android手机无忧出行应用系统软件分为6个模块,如图4所示。
设计图中各功能的应用场景:
手势密码模块,程序流程如图5所示。
新用户第一次登录时先看到引导页面(推荐该软件功能的一些截图提示),开启体验后跳转到创建密码页面,设置完用户绘制的手势密码进入登录密码页面,如果是老用户登录可直接进入登录密码页面,绘制专属自己的手势密码后方能登录成功进入主页面。此外,用户可以修改手势解锁密码,但是要在用户输入之前的密码匹配成功后才能重新绘制新的密码,否则提示“与原始密码不一致”并提供4次机会。若继续输错后则将手势密码锁住(让绘制手势密码界面不再出现绘制轨迹,并且没有任何数据传输功能),60s后方能修改。若用户忘记密码,可通过找回密码页面输入第一次创建密码时输入的特殊数字。若匹配成功,便能重新创建密码,否则提示“未能准确匹配,请重新输入”。
二维码名片模块:在EditText输入姓名、公司、职位、电话号码、邮箱等信息后点击生成二维码,供对方友人扫描添加。
天气预报模块:主页面显示本地今日天气,包括城市名称、天气情况图标和中文汉字、温度、风向参数。主页面还实现全国各主要城市的天气预报,天气预报除了上述天气参数外,还有之后两天的天气情况(没有风向参数)。
公交路线查询模块:在主页面实现一个跳转的按键功能,跳转到全国各地公交线路查询页面,在EditTex中输入要查询的城市和公交线路(如:上海市,763路),点击“查询”按钮后便能在地图上显示公交车的行驶路线,包括每一个停靠站点。
POI搜索:点击主页面提供的商家或景点类型,用户也可自己输入关键字进行搜索,便能获得该类型周围2km的所有商家,在ListView列表逐一显示。若商家数量较多,利用线程加载逐一显示;否则提示“未找到结果”字样,并隐藏加载条。
路径规划:在POI搜出商家信息后可随意點击任意一商家,进入到商家详情信息,显示百度地图本地定位范围,并通过“显示路线”按钮在地图上显示起点和终点路线。
3 系统软件实现
3.1 手势密码模块实现
如图6、图7所示,出现在用户第一次使用该软件或者忘记密码后输入匹配值重新设置密码时都会出现该页面。在EditText输入格式的属性设置为:android:inputType="numberPassword",限制键盘弹出格式即为数字键盘,输入的类型为数字加密型以提高安全性,此数值利用SharePreference保存到本地,作为找回密码的依据,属于必填项,建议用户输入记忆较深的数值,比如用户的手机号码等。记录九宫格手势的方式是利用数字记录,9个
圆圈分别标号为0-9,如图5绘制的手型,即为“03678”字符。创建密码时九宫格手势可以任意绘制,但点击保存时,写入系统的SharePreference数值是以最后一次绘制的手势记录并锁住键盘,若想更改绘制的手势点击“取消”按钮即可。以上操作绘制完成后点击保存。
3.2 主页及其它页面功能
主页采用侧滑功能,相比于腾讯QQ主页效果更具时尚感,主页布局采用图形方块布局,形象生动,如图8、图9所示。
3.3 左侧滑动页面功能
二维码电子名片模块功能效果如图10所示。
生成二维码核心代码:
public Bitmap qr_code(String string,BarcodeFormat format)
throws WriterException {
MultiFormatWriter writer=new MultiFormatWriter();
Hashtable
hst.put(EncodeHintType.CHARACTER_SET, "UTF-8");
BitMatrix matrix=writer.encode(string, format, 400, 400, hst);
int width=matrix.getWidth();
int height=matrix.getHeight();
int[] pixels=new int[width*height];
for (int y=0; y for (int x=0; x if (matrix.get(x, y)) { pixels[y*width+x]=0xff000000; } } } Bitmap bitmap=Bitmap.createBitmap(width, height,Bitmap.Config.ARGB_8888); //通过像素数组生成bitmap,具体参考api bitmap.setPixels(pixels,0,width,0,0,width,height); return bitmap;} 其中传入的string值为String contents="BEGIN:VCARD\\nVERSION:3.0\\n"+"N:"+name+"\\nORG:"+company+"\\nTITLE:"+position+"\\nNOTE:"+note+"\\nTEL:"+phone+"\\nADR:"+add+"\\nURL:"+web1+"\\nEMAIL:"+email+"\\nEND:VCARD";都是用户输入的数据,当对方扫描时所有信息都会显示在对方手机上,并且能够导入通讯录,方便快捷。
天气预报查询模块实现效果如图11所示。
天气查询模块显示今、明、后天3天的天气实况。
公交车路线查询功能实现效果如图12所示。
本功能实现的核心代码:
EditText editCity=(EditText) findViewById(R.id.city);
EditText editSearchKey=(EditText) findViewById(R.id.searchkey);
// 发起百度地图poi搜索,并从百度地图数据库中获得所有的公交线路类
// 类型的POI,再使用该poi唯一标识uid进行公交详情搜索
mSearch.searchInCity((new PoiCitySearchOption()).city(
editCity.getText().toString()).keyword(editSearchKey.getText().toString()));
3.4 主体页面功能
以点击第一张小图片(餐饮)为例,跳转到商户界面。
图13是实现页面跳转后加载出来的商家信息,图14是上拉加载后更多的商家信息。POI搜索功能模块的关键代码:
mPoiSearch.searchNearby(new PoiNearbySearchOption()
.location(new LatLng(lat, lng)).pageNum(10).keyword(keyWord).radius(2000).pageNum(num));
必须在类中实现OnGetPoiSearchResultListener的接口,还有定位获得的经纬度数据。上述代码中keyWord即为“餐饮美食”、“银行”、“景点”等关键词,可搜出用户周围2km以内的商家。
此外,在左侧滑动效果“周围商家”字样中,可进一步根据用户需求进行POI搜索,如图15所示。
3.5 商家详情功能模块
要想进一步了解更多的商家信息,直接点击图16中的商家即可,点击后显示路线功能模块。
实现此模块功能前要先实现百度地图SDK开发包中的一个重要接口,即OnGetRoutePlanResultListener()接口。
实现功能主要代码:
PlanNode stNode=PlanNode.withLocation(new LatLng(sLat, sLng));
PlanNode enNode=PlanNode.withLocation(new LatLng(eLat, eLng));
mSearch.walkingSearch((new WalkingRoutePlanOption()).from(stNode).to(enNode));
4 結语
基于Android的无忧出行应用软件系统,实现了二维码名片、天气查询、公交车查询以及附近商家及路线搜索功能。后续可根据用户体验意见,改正不足之处,拓展更多功能,更好地服务于大众。
参考文献:
[1] NUR ROKHMAN, LUBAB SAIFUDDIN. Location and time based reminder system on android mobile device[C]. Vienna, Austria,2016 2nd International Conference on Science in Information Technology(ICSITech). Piscataway, New Jersey:IEEE Press,2016:147-151.
[2] SHABTAI A, FLEDEL Y, ELOVICI Y. Securing Android-Powered mobile devices Using SELinux[J]. IEEE Security & Privacy,2010,8(3):36-44.
[3] SHAO G H. Application development research based on android platform[C]. International Conference on Intelligent Computation Technology and Automation. IEEE,2015:579-582.
[4] ADDANKI N. Android application for USDA (U.S. Department of Agriculture) structural design software[EB/OL]. http://www.doc88.com/p-0344526320714.html.
[5] ZAPATA B C. Android studio application development[EB/OL]. https://baike.so.com/doc/24014075-24591709.html.
[6] ROGERS R. Android application development[M]. O′Reilly, 2009.
[7] TAKALA T, KATARA M, HARTY J. Experiences of system-level model-based GUI testing of an android application[C]. IEEE International Conference on Software Testing, IEEE Computer Society, 2011:377-386.
[8] YAN D, YANG S, ROUNTEV A. Systematic testing for resource leaks in Android applications[C].IEEE, International Symposium on Software Reliability Engineering, IEEE, 2013:411-420.
[9] ENCK W, ONGTANG M, MCDANIEL P. Understanding android security[J]. IEEE Security & Privacy,2009,7(1):50-57.
[10] 唐诚.枚举Android系统九宫格密码[J].厦门城市职业学院学报,2013,15(2): 48-50.
[11] ISO/IEC 18004:2000(E)[S].Information technology-automatic identification and data capture techniques-Bar code symbology-QR,2000-6-15.
[12] 肖洪磊.潍坊二维码门户管理系统的设计与实现[D].济南:山东大学,2012.
[13] 马鸣,李海波.基于Android的二维码的生成与识别系统的设计与实现[J].电脑知识与技术,2012,8(9X):6353-6356.
[14] Android地图SDK[EB/OL]. http://developer.baidu.com/map/index.php?title=androidsdk.
[15] 常见手机定位方式浅谈[EB/OL]. http://www.cnblogs.com/syfwhu/p/5084115.html.
[16] 郭宏志.Andorid应用开发详解[M].北京:电子工业出版社,2010.
(责任编辑:杜能钢)