1、 智能终端软件开发设计报告班 级: 116112 姓 名:刘佳慧(20111001971)周林(20111001954) 指导老师: 徐战亚 中国地质大学(武汉)信息工程学院 2014年1月一、 项目背景和意义尿急是一个麻烦的问题,每个人都可能遇到,然而在陌生环境中强忍内急苦苦寻找厕所更是不少人都曾有过的尴尬经历。当然,把千辛万苦找到的厕所标记出来,让更多的人轻松的找到,是再好不过了。所以我们设计并开发了一款可以快速定位附近公厕,打发蹲坑时间的实用好玩的基于android的手机软件窝粑粑。二、 软件简介软件架构1、 界面设计采用了新颖的win8风格的界面,主页面布局了软件的几个主要功能。页面可
2、以侧滑,侧滑后是账户界面和软件维护界面。 2、 软件功能周边的坑:厕所的具体位置用经纬度坐标表示并且在地图上显示出来,用户还可以自定义搜索的范围,更快更高效的寻找合适的厕所,同时还有导航功能,使用户在陌生的环境中也能快速的找到厕所。 我发现的坑:用户可以将已找到的厕所地址信息上传到在线地图并标记,方便自己方便他人。 厕所的前世今生:厕所文化是一个很宽泛的话题,古今中外都有不同的看法,这里介绍了厕所文化的由来和一些历史上关于厕所的趣闻轶事。厕所是使人放松、振奋和感到享受的圣地。人们必须关注所有公共厕所设施的更新改造,使人们的生活质量不断提高。一个良好的厕所环境体现了对于使用者的尊重,反过来,使用
3、者也会尊重它,这样,人们的举止也相应地变得越来越文明。 萌马桶:随着科技的发展和生活水平的提高,人们对生活环境的要求也越来越高,在舒适健康的前提下,新奇有趣的造型更能令人们身心愉快。这里展示了最近几年的高科技新型马桶和一些世界各地的趣味马桶。厕所有鬼:在一些影视作品和民间传说中,厕所是十分容易闹鬼的一个场所。可怕的搞笑的哀怨的各种鬼怪故事让人害怕之余又忍不住想探究更多,在此奉上几篇经典鬼故事,因为是实习作业,时间和能力有限搜集的鬼故事不是很多。 手纸的学问:卫生纸虽然不起眼,但谈起卫生纸生产厂家的数量,单单就北京就有97家之多,如此惊人的数量,行业竞争的激烈程度,可见一斑。如此激烈的行业竞争,
4、卫生纸的品质更是参差不齐,然而,这卫生纸里又有多少玄机呢?这里告诉大家选购卫生纸的基本常识和一些实惠安全的卫生纸品牌。 粑粑好才是真的好:粪便是最能直接反应消化系统各器官组织功能状况的一面“镜子”,大便的形态颜色可以“隐喻”我们身体的一些病理变化。这里简单的阐述了其间的相应关系。3、技术难点和介绍主要用到的技术有andriod移动开发技术、百度地图android SDK的使用和android服务端相应功能应用。选择Android操作系统Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。尚未有统一
5、中文名称,中国大陆地区较多人使用“安卓”或“安致”。Android操作系统最初由Andy Rubin开发,主要支持手机。 2005年8月由Google收购注资。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良 Android系统。随后Google以Apache开源许可证的授权方式,发布了Android的源代码。第一部Android智能手机发布于2008 年10月。Android逐渐扩展到平板电脑及其他领域上,如电视、数码相机、游戏机等。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。 2012年11月数据显示
6、,Android占据全球智能手机操作系统市场76%的份额,中国市场占有率为90%。2013年09月24日谷歌开发的操作系统Android在迎来了5岁生日,全世界采用这款系统的设备数量已经达到10亿台。当前的Android操作系统具有以下几个功能:显示布局:Android操作系统支持更大的分辨率,VGA,2D显示,3D显示都给予OpenGL ES 3.0标准规格(4.3版本开始支持OpenGL ES 3.0),并且支持传统的智能手机。数据存储:Android操作系统内置SQLite小型关联式资料库管理系统来负责存储数据。网络:Android操作系统支持所有的网络制式,包括GSM/EDGE、IDE
7、N、CDMA、EV-DO、UMTS、Bluetooth、Wi-Fi、LTE、NFC和WiMAX。信息:作为原设计给智能手机使用的操作系统,Android操作系统原生支持短信和邮件,并且支持所有的云信息和服务器信息。语言:Android操作系统支持多语言。浏览器:Android操作系统中内置的网页浏览器基于WebKit核心,并且采用了Chrome V8引擎。在Android 4.0内置的浏览器测试中,HTML5和Acid3故障处理中均获得了满分,并且于2.2版及之后能原生支持Flash,4.0版本后去除对Flash的支持。支持Java:虽然Android操作系统中的应用程序大部分都是由Java编
8、写的,但是Android却是以转换为Dalvik executables的文件在Dalvik虚拟机上运行的。由于Android中并不自带Java虚拟机,因此无法直接运行Java程序。不过Android平台上提供了多个Java虚拟机供用户下载使用,安装了Java虚拟机的Android系统可以运行Java_ME的程序。媒体支持:Android操作系统本身支持以下格式的音频/视频/图片媒体:WebM、H.263, H.264(in 3GP or MP4 container)、MPEG-4 SP、AMR, AMR-WB(in 3GP container)、AAC, HE-AAC(in MP4 or 3
9、GP container)、MP3、MIDI、Ogg Vorbis、FLAC、WAV、JPEG、PNG、GIF、BMP。如果用户需要播放更多格式的媒体,可以安装其他第三方应用程序。流媒体支持:Android操作系统支持RTP/RTSP(3GPP PSS, ISMA)的流媒体以及(HTML5 )的流媒体,同时还支持Adobe的Flash,在安装了RealPlayer之后,还支持苹果公司的流媒体。硬件支持:Android操作系统支持识别并且使用视频/照片摄像头,多点电容/电阻触摸屏,GPS,加速计,陀螺仪,气压计,磁强计,键盘,鼠标,USB Disk,专用的游戏控制器,体感控制器,游戏手柄,蓝牙设
10、备,无线设备,感应和压力传感器,温度计,加速2D位位块传输(硬件方向,缩放,像素格式转 换)和3D图形加速。多点触控:Android支持本地的多点触摸,在最初的HTC Hero智能手机上即有这个功能。该功能是内核级别(为了避免对苹果公司的触摸屏技术造成侵权)。蓝牙:Android支持A2DP,AVRCP,发送文件(OPP),访问电话簿(PBAP),语音拨号和发送智能手机之间的联系。同时支持键盘,鼠标和操纵杆(HID)。多任务处理:Android操作系统支持本地的多任务处理。语音功能:除了支持普通的电话通话之外,Android操作系统从最初的版本开始就支持使用语音操作来使用Google进行网页搜
11、索等功能。而从Android OS v2.2开始,语音功能还可以用来输入文字、语音导航等功能。无线共享功能:Android操作系统支持用户使用本机充当“无线路由器”,并且将本机的网络共享给其他智能手机,其他机器只需要通过WiFi查找到共享的无线热点,就可以上网。而在Android OS v2.2版本之前的操作系统则需要通过第三方应用或者其他定制版系统来实现这个功能。截图功能:从Android OS v4.0版本开始,Android操作系统便支持截图功能,该功能允许用户直接抓取智能手机屏幕上的任何画面,用户还可以通过编辑功能对截图进行处理,还 可以通过蓝牙/E-mail/微博/共享等方式发送给其
12、他用户或者上传到网络上,也可以拷贝到计算机中选择百度地图android SDK当初在谷歌地图和百度地图之前选择了好久,最后选择了百度地图。这里结合受众反映针对android版的百度地图作出了一些分析:1、界面:百度地图很多都是在显眼位置用文字做提示,一目了然,谷歌界面有点炫,很多用图标来表示,但是用起来相对复杂,不熟悉的用户需要确定这个图标是否是所需要选择的。 而百度地图搜索框下就直接有“公交”“驾车”的选项,界面简洁直接很多,谷歌地图需要点击获取路线,再点击小图标来选择“公交”这些选项,而且图标不够引 人注目,使用起来相对复杂些,试想一个很少用网络地图的人分别使用二者地图,那个更方便呢?应该
13、是百度,大多数用户通过地图是查询位置-这个地方在哪,周 围有什么地物,查询路线-从一个方到另一个地方如何到达,用百度地图,这些问题很容易解决,而用谷歌地图得摆弄一会儿。 2、百度地图的查询路线更好,首先还是界面更简洁直接,然后是数据的问题,先不管为他们提供数据的公司如何,刚刚特意同时查了下,同样地起点和终点,百度地 图给出了5条路线,谷歌地图给出的是4条路线,而且百度地图路线的选择时可以选择“较快捷”“少换乘”“少步行”三种方式,更方便。打车费用也直接显示出 来,而且个人体会10元内的打车费用基本正确。 3、百度地图有个视野内搜索功能,可以很方便地查找到目标位置,谷歌地图没有。这个很重要。 4
14、、一个重要界面布局问题,百度地图是地图视野在左,而谷歌地图是地图视野在右,我们现在时喜欢从左到右看东西啊,这点百度地图更符合用户习惯。 (当然也可能是我常用百度地图,所以这么觉得) 5、百度地图已经和都市圈合作推出了部分城市如北京、上海、深圳、广州的三维地图,谷歌地图没有。 6、百度地图地图视野上方有个截图功能,可以直接拉框截图,谷歌地图没有。 7、使用百度的占大多数,经常可以听到“百度一下啊”的话语。随之带来百度地图的使用率 也相对较高。劣势: 1、如果需要从网络地图上获取数据的话,谷歌地图完胜,而且还有谷歌地球在一旁辅助,如虎添翼,从网上各种各样的谷歌地图相关工具软件就可以看出。 2、路线
15、查询时输入地点名称却有多个符合条件时,会给出一个下拉菜单给予选择,同一地点谷歌地图提供的数据精确到街道,而百度地图精确到区。 3、谷歌地图可以将侧边栏隐藏起来,看到更大的地图视野,而百度地图是点击全屏来显示更大的视野,两种切换方式比起来谷歌的更舒服。 4、谷歌地图的分享链接提供“粘贴 HTML 以便嵌入到网站”这一功能,百度没有。 5、界面布局百度地图更简洁,但是色彩搭配上和画面感上谷歌地图更好。 6、谷歌的品牌形象占优。Android服务端开发XML与JSON 解析:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript(St
16、andard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C+, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。Servlet:servlet是在服务器上运行的小程序。这个词是在Javaapplet的环境中创造的,Java applet是一种当作单独文件跟网页一起发送的小程序,它通常用于在客户端运行,结果得到为用户进行运算或者根据用户互作用定位图形等服务。
17、服务器上需要一些程序,常常是根据用户输入访问数据库的程序。这些通常是使用公共网关接口(CGI(Common Gateway Interface))应用程序完成的。然而,在服务器上运行Java,这种程序可使用Java编程语言实现。在通信量大的服务器上,Javaservlet的优点在于它们的执行速度更快于CGI程序。各个用户请求被激活成单个程序中的一个线程,而无需创建单独的进程,这意味着服务器端处理请求的系统开销将明显降低。MySQL数据库:MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司。MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、
18、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。由于时间以及人力有限,服务器端尚未将开发方案付诸实践,为便于客户端程序的测试,采用sqlite数据库存储数据。三、 程序设计实现软件功能模块实现:主页面:布局文件: 周边的坑:厕所的具体位置用经纬度坐标表示并且在地图上显示出来,用户还可以自定义搜索的范围,更快更高效的寻找合适的厕所,同时还有导航功能,使用户在陌生的环境中也能快速的找到厕所。代码实现:public class SearchPOI_Activity extends Activity DBAdapter GeoPo
19、iDB;private int distance=0;/ 地图显示相关private MapView mMapView = null;/ 地图显示图层private MKSearch mSearch = null; / 搜索模块,也可去掉地图模块独立使用private MapController mMapController = null;/ 地图控制private MyPoiOverlay poiOverlay = null;/ 搜索结果图层/ 定位相关LocationClient mLocClient;LocationData locData = null;public MyLocatio
20、nListenner myListener = new MyLocationListenner();/ 定位图层MyLocationOverlay myLocationOverlay = null;/ 定位图层boolean isRequest = false;/ 是否手动触发请求定位boolean isFirstLoc = true;/ 是否首次定位private GeoPoint mGeoPoint;/当前位置变量private GeoPoint endGeoPoint;/ 自定义坐标点poi相关private MyOverlay mOverlay = null;/ 自定义poi图层pri
21、vate PopupOverlay pop = null;/ 弹出图层private ArrayList mItems = null;private ArrayList mPoiMSG = null;private TextView popupText = null;private View viewCache = null;private View popupInfo = null;private View popupLeft = null;private View popupRight = null;private Button button = null;private MapView.
22、LayoutParams layoutParam = null;private OverlayItem mCurItem = null;/ UI相关private Button requestLocBtn;Button map_bigger = null;/ 地图放大按钮Button map_smaller = null;/ 地图缩小按钮private int maxZoomLevel;private int minZoomLevel;String SearchKeyTex = 厕所;private EditText SearchDistance;int mapstyle = 0;Overri
23、depublic boolean onCreateOptionsMenu(Menu menu) / TODO 自动生成的方法存根/ 第一个参数是menugroup值;第二个参数是每个menu的值,int类型;第三个参数表示menu显示的顺序;第四个参数是menu的显示内容menu.add(0, 1, 1, 实景地图).setIcon(R.drawable.changemap);menu.add(0, 2, 2, 搜索).setIcon(R.drawable.searchpoi);return super.onCreateOptionsMenu(menu);Overridepublic bool
24、ean onMenuItemSelected(int featureId, MenuItem item) / TODO 自动生成的方法存根if (item.getItemId() = 1) if (mapstyle = 0) mMapView.setSatellite(true);mapstyle = 1;item.setTitle(二维地图); else mMapView.setSatellite(false);mapstyle = 0;item.setTitle(实景地图); else if (item.getItemId() = 2) distance=getDistance();mSearch.poiSearchNearBy(SearchKeyTex, mGeoPoint,distance);addPoitoListArr(null);resetOverlay(null);return super.onMenuItemSelected(featureId, item);