示所搜索公交的路线结果。
在右图TextView中输入所搜索目的地景点名称关键字,界面即可返回相关的景点信息,包括景区地图、景点旅游攻略、景点宾馆住宿、精彩游记等信息。
路线规划界面 地图定位界面
图3-12路线规划界面 图3-13地图定位界面
在左图EditView中输入城市名和目的地关键字,再选择出行方式,界面即可返相应出行方式的路线结果。
在右图中能显示用户的所在位置,单击satellite按钮后,界面会显示卫星视图,再次单击又会回到普通地图视图模式。
周边搜索界面 卫星地图界面
图3-14周边搜索界面 图3-15卫星地图界面
在左图中有多个项目关键字可供选择,选择其中一个后,系统会跳转到地图界面并显示搜索结果供用户选择。
3.9界面的实现原理
图3-16界面实现原理
界面上有一个放大缩小的控件,用户操作时通过调用zoomControls.setIsZoomInEnabled(true);zoomControls.setIsZoomOutEnabled(true);或者mMapView.setBuiltInZoomControls(true);两种方式来实现放大缩小操作,每次放大或缩小后,系统都会获取新的地图数据并刷新界面。
MapActivity调用mMapView,而mMapView继承自MapView,所以可以覆盖其onDraw方法实现在手机屏幕上贴图。程序获取图片,粘贴图片的大体流程为:通过监听按键,然后根据的改变从数据库中获取贴图,最后采用贴图算法进行粘贴,更新视图。系统完成到最后,为了让风格统一化,以使界面能够让人舒心,因此系统界面做了一些精简,按钮和文字的显示我也适当地做了些小调整,以保持UI友好。同时POI显示也被略加修改,以适应客户对界面效果的需求。
第4章 系统的重点和难点
4.1 重点与难点
本系统的重点与难点主要在于搭建好Android开发环境平台,申请百度地图API和科大讯飞API的使用权限,并得到上述公司地图和语音服务的使用授权,获取百度API Key和讯飞语音APPID。该系统涉及用户的位置定位、卫星交通地图和普通地图视图之间的切换、路线规划、城市周边关键字搜索及景点信息搜索等内容,如何获取用户当前的地理位置信息及怎样去进行路线规划并获取结果返回显示,都是该系统需要攻克的重点与难点问题。
该系统支持语音录入文字信息的功能,这就涉及如何正确识别语音并返回结果这个过程的逻辑处理问题,这也是需要解决的难题之一。
此外由于Android平台的碎片化问题日趋严重,同一时间多种版本的存在给用户以及开发者带来了不小的麻烦,不同手机的分辨率不尽相同,这也是碎片化问题存在的根本原因所在,该问题的存在可能导致应用程序无法在相关安卓设备上运行。于是如何开发一款能在多种设备上运行的应用程序就成了开发过程中的难点问题了。目前该系统能在主流的分辨率下(480×800)完美运行。
4.2重点与难点的解决方案
刚开始接触Android开发平台时,Android对我来说还是一个比较陌生的概念。一切都像是从头开始,从刚开始摸索搭建Android开发环境平台到熟悉Android系统架构,到API的引入,再到完成这个系统的开发,最后签名打包发布,这个过程设计多个领域的知识相结合:Android、Java、xml、百度API,科大讯飞API等,我通过上网上去查资料,逛论坛,研究DEMO,向别人请教等各种方式,在不断实践中吸取经验和教训,最终终于在我的坚持不懈的努力下解决了这个难题。具体的解决方案如下:
获取POI搜索值:
public void onGetPoiResult(MKPoiResult res, int type, int error) {
if (res == null) {
Log.d("onGetPoiResult", "the onGetPoiResult res is " + type
+ "__" + error);
} else
Log.d("onGetPoiResult",
"the onGetPoiResult res is "
+ res.getCurrentNumPois() + "__"
+ res.getNumPages() + "__"
+ res.getNumPois() + "__" + type + "__"
+ error);
// 错误号可以去参考MKEvent中的定义
if (error != 0 || res == null) {
Log.d("onGetPoiResult", "the onGetPoiResult res 0 ");
Toast.makeText(MyMapActivity.this, "抱歉,未找到结果",
Toast.LENGTH_LONG).show();
return;
}
ArrayList
poiResult= res.getMultiPoiResult();
if (poiResult != null)
Log.d("onGetPoiResult", "the onGetPoiResult res 1__"
+ poiResult.size());
// 将地图移动到第一个POI中心点
if (res.getCurrentNumPois() > 0) {
Log.d("onGetPoiResult", "the onGetPoiResult res 2");
// 将poi结果显示到地图上面
PoiOverlay poiOverlay = new PoiOverlay(MyMapActivity.this,
mMapView);
poiOverlay.setData(res.getAllPoi());
mMapView.getOverlays().clear();
mMapView.getOverlays().add(poiOverlay);
mMapView.invalidate();
mMapView.getController().animateTo(res.getPoi(0).pt);
} else if (res.getCityListNum() > 0) {
Log.d("onGetPoiResult", "the onGetPoiResult res 3");
String strInfo = "在";
for (int i = 0; i < res.getCityListNum(); i++) {
strInfo += res.getCityListInfo(i).city;
strInfo += ",";
}
strInfo += "找到结果";
Toast.makeText(MyMapActivity.this, strInfo,
Toast.LENGTH_LONG).show();
}
Log.d("onGetPoiResult", "the onGetPoiResult res 4");
}
获取讯飞语音识别结果:
protected Dialog onCreateDialog(int id) {
RecognizerDialog recognizerDialog = new RecognizerDialog(
MyRoutePlan.this, "appid=51b1ad4e");
// 这里输入的是从科大讯飞申请到的appid
recognizerDialog.setEngine("sms", "ptt=0", null);
recognizerDialog.setListener(new RecognizerDialogListener() {
@Override
public void onResults(ArrayList results,
boolean arg1) {
StringBuffer result = new StringBuffer();
for (RecognizerResult r : results) {
result.append(r.text);
}
value = result.toString();}
@Override
public void onEnd(SpeechError arg0) {
}
});
return recognizerDialog;
}
第5章 结论
5.1总结与结论
经过将近一个学期的努力,基于android的导航系统这个课题终于完成了。从一开始对于如何着手这个课题的无从下手,到自己不断地摸索和向老师同学请教学习,到最后熟悉Android的整个开发流程和环境并完成这个系统,一路走来,感觉自己收获颇多。
在这个不断实践的过程中,我学到了很多知识:Java语言编程、百度API和地图的各个功能,科大讯飞语音的调用,XML脚本语言的使用等等。但其中最重要的一点不是知识的学习而是如何利用身边的现有资源去解决出现的问题,如何独立去学习新知识和解决问题的能力,这是我真正进步的地方。
但是这个过程中还是存在很多问题的,这个系统还有不少地方做的不好,整个系统地UI不是特别友好,其整体构思也有所欠缺,功能上不够丰富。这些问题,在今后需要引起重视。
总的来说,在这个课题的完成过程中,我积累了一些项目经验,这对我今后的学习和生活应该会有所裨益。
5.2不足与展望
由于本人能力和时间有限,加之本人对Android的理解还较为浅显,在一开始开发本系统时,对开发工具的不甚
上一篇:基于Android手机平台的音乐播放器
下一篇:试论APP广告在手机中的应用