一、引言
在当今社会,手机已经成为人们日常生活中不可或缺的工具,以用户体验为核心诉求的智能手机,使手机由单一的通信终端发展成为互联网终端。越来越多的互联网应用被移植到智能手机中来,导航软件在智能手机中的应用成为了研究热点之一。在目前大部分智能手机都提供GPS 定位服务以及3G 无线网络越来越普及的双重驱动下,在Google 地图中实现导航服务,是具有可行性的。
本文提出并实现了一种基于Google Map Api 的Android 导航应用,能够给用户提供人性化和智能化的地图导航服务。
二、系统体系结构
图1 系统体系结构
三、UI 界面设计
Android 应用程序的基本功能单元就是AcTIvity 类中的一个对象,Activity 主要功能为界面显示和事件处理。在Activity 中使用View和ViewGroup 控件配XML 样式来进行界面设计,使用事件处理进行人机交互,主要的事件处理为按钮事件、触屏事件以及一些高级控件的事件监听。通过设置控件与事件处理就形成了UI 界面。
1、GPS 定位信息的显示
通过textView控件显示定位信息。在程序打开时就显示目前用户的具体位置和邮编,门牌号等相关信息,若GPS 定位不成功或者出错,则显示“无法获取目前地址”。
2、用户输入导航起始地点
通过设置EditView控件,用户能在改控件中输入自己需要导航的起始地点,通过设置名为“导航”的ButtON 控件对输入信息进行提交,当监听到Button 按钮OnClick 时则分析起始地址,若起始地址都能被解析,则载入导航地图,若又一个地址解析失败,则通过对话框控件Dialog 提示用户“输入地址错误,请重新输入”。
3、导航界面设计
在导航界面中设置WebView 控件,WebView 控件通过与javascript 互相调用,把起始地址等信息传递给服务器中的HTML 导航网页。网页获得地址等信息后进行导航并通过WebView控件显示在应用程序导航界面中。
4、语音功能界面设计
在导航界面中设置名为语音导航的Button 控件,当用户按住该按钮时就为用户提供语音导航服务。
下图为定位与输入地址信息UI 界面:
图2 定位与输入地址信息UI 界面[page]
四、GPS 定位功能实现
全球卫星定位系统(Global Positioning System,GPS)是一个中距离圆型轨道卫星导航系统,它可以为地球表面超98%的地区提供准确的定位、测速和高精度的时间标准服务,在各个领域都有广泛的应用。
Android 支持GPS 服务的API.该服务可以用来获取当前设备的地理位置,应用程序通过该API 获得地理位置,并可以定时请求更新当前设备的地理定位信息。该系统将用到GPS API 中包几个重要的功能类:
LocATIonManager,用于管理Android 用户定位服务;LocationProvider,提供多种定位方式供开发者选择;Criteria,是应用通过LocationProvider 中设置的属性来选择合适的定位提供者。
获取用户当前位置的步骤如下:
1、在AndroidManifeST.xml 中声明相应的权限:
< android:name="“android.permission.ACCESS_COARSE_LOCATION”" permission>
2、获取LocationManager 对象:
LocationManager locationManager =(LocationManager)getSystemSERvice (Context.LOCATION_SERVICE);
3、设置Criteria 对象:
Criteria criteria = newCriteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(false);
criteria.setPowerRequirement(Criteria.POWER_LOW);
4、设置Provider:
String provider = locationManager.getBestProvider(criteria,true);
Location location= locationManager.getLastKnownLocation(provider);
五、导航功能实现
在正式版本的Android SDK 中,移除了原有M5 版本里面的DrivingDirection package,所以无法透过程序来规划导航线路。因此导航功能的实现我们是通过载入web 导航网页的方式实现的。Android 提供了一个名为WebView的控件来专门浏览网页。
WebView控件是基于WebKit 浏览器网页排版引擎的一个java接口,它能够完美支持html、javascript、css.有时我们可以把整个UI 甚至数据处理都交给WebView,配合PHP 等服务器端程序,这样的Android 应用开发更为简单UI 更为丰富。因此本系统的导航功能的主要工作就集中在编写Google Map Api javascript 版本的导航网页以及WebView与javascript 的数据交互中。
1、WebView 的定义及设置:
首先要在XML 布局文件中定义WebView控件;然后在程序中装载这个控件,设置属性;最后通过loadUrl 方法实现网页的载入。
WebView 常用的类有:WebSettings、WebViewClient、WebChromeClient.
WebSettings 用来设置WebView的一些属性状态,如:
// 设置可以访问文件
webSettings.setAllowFileAccess(true);
// 设置支持缩放
webSettings.setBuiltInZoomControls(true);
WebViewClient 专门辅助WebView处理各种通知、请求等事件类,通过WebView 的setWebViewClient 方法来指定一个WebViewClient 对象,如下:
webView.setWebViewClient(newWebViewClient()
{
public boolean shouldOverrideUrlLoading(WebViewview,String url){
view.loadUrl(url);
return true;
}
})
WebChromeClient 类专门用来辅助WebView对话框、网站图标、网站Title、加载进度等。使用方法如下:
webView.setWebChromeClient(newWebChromeClient()
{
@Override
// 该方法为处理javascript 中的alert 事件
public boolean onJsAlert (WebView view,String url,Stringmessage,
JsResult result){
// TODO Auto- generated method stub
return super.onJsAlert(view,url,message,result);
});
设置完WebView后主要工作就是Html 网页的编写。
2、编写Html 网页实现线路规划:
线路规划的前提是必须要指定起始地址以及出行方式,本系统用户是通过在Activity 中输入地址和选择出行方式来向系统提交信息。WebView 必须从应用中获取信息,然后发送给Html,供javascript 调用并实现导航。
在android 应用端,定义一个类保存用户输入的起始地址的经纬度信息:
// 在javascript 脚本中调用得到LatlngData 对象
public LatlngData getLatlngData()
{ return latlngData;
}
/* 定义一个latlngData 类,保存经纬度信息,经纬度由Geocoder.getFromLocationNAME()方法按照用户输入地址解析而得到。*/[page]
class LatlngData
{ String startLatlng;
String endLatlng;
public LatlngData()
{
this.startLatlng=“”;
this.endLatlng =“”;
}
public String getStartLatlng()
{
return startLatlng;
}
public String getEndLatlng()
{
return endLatlng;
}
}
// 通过LatlngDataInterface () 方法将数据类绑定给javascript,这样javascript 就能够获// 得了用户的数据了。
public class DataJavaScriptInterface{
public LatlngData LatlngDataInterface(){
latlngData = getLatlngData();
return latlngData;
}
在Html 网页中编写以下代码获得数据,并通过格式转换使数据能够为线路规划所接受,代码如下:
var latlngData = window.demo.LatlngDataInterface();
// 获取起点和终点位置的经纬度信息为String 格式
startLatlng = latlngData.getStartLatlng();
endLatlng = latlngData.getEndLatlng();
// 把String 格式经纬度转换为Float 格式
startLat = parseFloat(startLatlng.substring(0,8));
startLng = parseFloat(startLatlng.substring(10,18));
endLat = parseFloat(endLatlng.substring(0,8));
endLng = parseFloat(endLatlng.substring(10,18));
通过DirectionsService 对象计算路线(使用各种交通方式)。
此对象与Google Maps API Directions Service 进行通信,该服务将接收路线请求并传回计算结果。可以自行处理这些路线结果,也可以使用DirectionsRenderer 对象渲染这些结果:
function calcRoute(){
start = beginLatlng;
end = endLatlng;
var request = {
origin:start,
destination:end,
travelMode: google.maps.DirectionsTravelMode.DRIVING
};
directionsService.route(request,function(response,status){
if(status == google.maps.DirectionsStatus.OK){
var warnings = document.getElementById(“warnings_panel”);
warnings.innerHTML = “” + response.routes [0].warnings + “”;
directionsDisplay.setDirections(response);
showSteps(response);
}
});
}
通过上述的操作我们基本上实现了线路规划,在此基础上我们能够添加更多的功能,如语音导航、路况提示、周边配套设施提示等,使用户获得更好的用户体验。最终效果如下图所示:
图3 最终效果图
六、结束语
智能手机导航应用无疑将会有广阔的市场前景,能够为用户提供更多有用信息的导航软件将是未来该应用方向的必然趋势,Google Maps 作为最早的网上电子地图服务,其强大的功能和开放的API ,使得我们能够在其基础上二次开发出很好的应用。具有很大的商用价值。该系统还存在网页载入速度较慢、语音提示功能等问题,还有待进一步研究和开发。
关键字:智能手机 Google Maps
引用地址:基于google地图的Android系统导航应用设计
在当今社会,手机已经成为人们日常生活中不可或缺的工具,以用户体验为核心诉求的智能手机,使手机由单一的通信终端发展成为互联网终端。越来越多的互联网应用被移植到智能手机中来,导航软件在智能手机中的应用成为了研究热点之一。在目前大部分智能手机都提供GPS 定位服务以及3G 无线网络越来越普及的双重驱动下,在Google 地图中实现导航服务,是具有可行性的。
本文提出并实现了一种基于Google Map Api 的Android 导航应用,能够给用户提供人性化和智能化的地图导航服务。
二、系统体系结构
图1 系统体系结构
三、UI 界面设计
Android 应用程序的基本功能单元就是AcTIvity 类中的一个对象,Activity 主要功能为界面显示和事件处理。在Activity 中使用View和ViewGroup 控件配XML 样式来进行界面设计,使用事件处理进行人机交互,主要的事件处理为按钮事件、触屏事件以及一些高级控件的事件监听。通过设置控件与事件处理就形成了UI 界面。
1、GPS 定位信息的显示
通过textView控件显示定位信息。在程序打开时就显示目前用户的具体位置和邮编,门牌号等相关信息,若GPS 定位不成功或者出错,则显示“无法获取目前地址”。
2、用户输入导航起始地点
通过设置EditView控件,用户能在改控件中输入自己需要导航的起始地点,通过设置名为“导航”的ButtON 控件对输入信息进行提交,当监听到Button 按钮OnClick 时则分析起始地址,若起始地址都能被解析,则载入导航地图,若又一个地址解析失败,则通过对话框控件Dialog 提示用户“输入地址错误,请重新输入”。
3、导航界面设计
在导航界面中设置WebView 控件,WebView 控件通过与javascript 互相调用,把起始地址等信息传递给服务器中的HTML 导航网页。网页获得地址等信息后进行导航并通过WebView控件显示在应用程序导航界面中。
4、语音功能界面设计
在导航界面中设置名为语音导航的Button 控件,当用户按住该按钮时就为用户提供语音导航服务。
下图为定位与输入地址信息UI 界面:
图2 定位与输入地址信息UI 界面[page]
四、GPS 定位功能实现
全球卫星定位系统(Global Positioning System,GPS)是一个中距离圆型轨道卫星导航系统,它可以为地球表面超98%的地区提供准确的定位、测速和高精度的时间标准服务,在各个领域都有广泛的应用。
Android 支持GPS 服务的API.该服务可以用来获取当前设备的地理位置,应用程序通过该API 获得地理位置,并可以定时请求更新当前设备的地理定位信息。该系统将用到GPS API 中包几个重要的功能类:
LocATIonManager,用于管理Android 用户定位服务;LocationProvider,提供多种定位方式供开发者选择;Criteria,是应用通过LocationProvider 中设置的属性来选择合适的定位提供者。
获取用户当前位置的步骤如下:
1、在AndroidManifeST.xml 中声明相应的权限:
< android:name="“android.permission.ACCESS_COARSE_LOCATION”" permission>
2、获取LocationManager 对象:
LocationManager locationManager =(LocationManager)getSystemSERvice (Context.LOCATION_SERVICE);
3、设置Criteria 对象:
Criteria criteria = newCriteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(false);
criteria.setPowerRequirement(Criteria.POWER_LOW);
4、设置Provider:
String provider = locationManager.getBestProvider(criteria,true);
Location location= locationManager.getLastKnownLocation(provider);
五、导航功能实现
在正式版本的Android SDK 中,移除了原有M5 版本里面的DrivingDirection package,所以无法透过程序来规划导航线路。因此导航功能的实现我们是通过载入web 导航网页的方式实现的。Android 提供了一个名为WebView的控件来专门浏览网页。
WebView控件是基于WebKit 浏览器网页排版引擎的一个java接口,它能够完美支持html、javascript、css.有时我们可以把整个UI 甚至数据处理都交给WebView,配合PHP 等服务器端程序,这样的Android 应用开发更为简单UI 更为丰富。因此本系统的导航功能的主要工作就集中在编写Google Map Api javascript 版本的导航网页以及WebView与javascript 的数据交互中。
1、WebView 的定义及设置:
首先要在XML 布局文件中定义WebView控件;然后在程序中装载这个控件,设置属性;最后通过loadUrl 方法实现网页的载入。
WebView 常用的类有:WebSettings、WebViewClient、WebChromeClient.
WebSettings 用来设置WebView的一些属性状态,如:
// 设置可以访问文件
webSettings.setAllowFileAccess(true);
// 设置支持缩放
webSettings.setBuiltInZoomControls(true);
WebViewClient 专门辅助WebView处理各种通知、请求等事件类,通过WebView 的setWebViewClient 方法来指定一个WebViewClient 对象,如下:
webView.setWebViewClient(newWebViewClient()
{
public boolean shouldOverrideUrlLoading(WebViewview,String url){
view.loadUrl(url);
return true;
}
})
WebChromeClient 类专门用来辅助WebView对话框、网站图标、网站Title、加载进度等。使用方法如下:
webView.setWebChromeClient(newWebChromeClient()
{
@Override
// 该方法为处理javascript 中的alert 事件
public boolean onJsAlert (WebView view,String url,Stringmessage,
JsResult result){
// TODO Auto- generated method stub
return super.onJsAlert(view,url,message,result);
});
设置完WebView后主要工作就是Html 网页的编写。
2、编写Html 网页实现线路规划:
线路规划的前提是必须要指定起始地址以及出行方式,本系统用户是通过在Activity 中输入地址和选择出行方式来向系统提交信息。WebView 必须从应用中获取信息,然后发送给Html,供javascript 调用并实现导航。
在android 应用端,定义一个类保存用户输入的起始地址的经纬度信息:
// 在javascript 脚本中调用得到LatlngData 对象
public LatlngData getLatlngData()
{ return latlngData;
}
/* 定义一个latlngData 类,保存经纬度信息,经纬度由Geocoder.getFromLocationNAME()方法按照用户输入地址解析而得到。*/[page]
class LatlngData
{ String startLatlng;
String endLatlng;
public LatlngData()
{
this.startLatlng=“”;
this.endLatlng =“”;
}
public String getStartLatlng()
{
return startLatlng;
}
public String getEndLatlng()
{
return endLatlng;
}
}
// 通过LatlngDataInterface () 方法将数据类绑定给javascript,这样javascript 就能够获// 得了用户的数据了。
public class DataJavaScriptInterface{
public LatlngData LatlngDataInterface(){
latlngData = getLatlngData();
return latlngData;
}
在Html 网页中编写以下代码获得数据,并通过格式转换使数据能够为线路规划所接受,代码如下:
var latlngData = window.demo.LatlngDataInterface();
// 获取起点和终点位置的经纬度信息为String 格式
startLatlng = latlngData.getStartLatlng();
endLatlng = latlngData.getEndLatlng();
// 把String 格式经纬度转换为Float 格式
startLat = parseFloat(startLatlng.substring(0,8));
startLng = parseFloat(startLatlng.substring(10,18));
endLat = parseFloat(endLatlng.substring(0,8));
endLng = parseFloat(endLatlng.substring(10,18));
通过DirectionsService 对象计算路线(使用各种交通方式)。
此对象与Google Maps API Directions Service 进行通信,该服务将接收路线请求并传回计算结果。可以自行处理这些路线结果,也可以使用DirectionsRenderer 对象渲染这些结果:
function calcRoute(){
start = beginLatlng;
end = endLatlng;
var request = {
origin:start,
destination:end,
travelMode: google.maps.DirectionsTravelMode.DRIVING
};
directionsService.route(request,function(response,status){
if(status == google.maps.DirectionsStatus.OK){
var warnings = document.getElementById(“warnings_panel”);
warnings.innerHTML = “” + response.routes [0].warnings + “”;
directionsDisplay.setDirections(response);
showSteps(response);
}
});
}
通过上述的操作我们基本上实现了线路规划,在此基础上我们能够添加更多的功能,如语音导航、路况提示、周边配套设施提示等,使用户获得更好的用户体验。最终效果如下图所示:
图3 最终效果图
六、结束语
智能手机导航应用无疑将会有广阔的市场前景,能够为用户提供更多有用信息的导航软件将是未来该应用方向的必然趋势,Google Maps 作为最早的网上电子地图服务,其强大的功能和开放的API ,使得我们能够在其基础上二次开发出很好的应用。具有很大的商用价值。该系统还存在网页载入速度较慢、语音提示功能等问题,还有待进一步研究和开发。
上一篇:悬空操作来袭:ARM携手eyeSight 未来手机将整合手势识别
下一篇:基于分级通信模式的小区智能抄表系统
推荐阅读最新更新时间:2024-05-02 22:48
Google Brillo物联网操作系统技术观察
DIGITIMES Research观察,Google虽已进一步揭露其物联网作业系统Brillo的技术细节与商业合作伙伴,但现阶段仍缺乏系统合作业者(在此指硬体装置的系统商,而非规划、布建的系统整合商)与产品具体应用方向,且Google主张高度掌握作业系统运作、更新、终端使用行为等资讯,此均可能成为Brillo推行上的隐忧。 Brillo确定支援x86、ARM、MIPS等3种处理器架构,记忆体最低需求量为32MB,储存空间最低需求量为128MB,并支援Wi-Fi、蓝牙等无线通讯,且Brillo核心服务中已包含Weave通讯协定。 Google承诺Brillo作业系统的线上更新与周期性更新,每6个星期进行次要更新,每6个月进行
[手机便携]
智能手机电源管理芯片逐渐走向集成
去年,全球生产了约11亿部手机,因此,手机电源管理芯片市场非常庞大,但这一芯片市场的垄断程度也在提高。 智能手机中原来采用的分立电源管理芯片已经基本上被集成在一起,而节能技术的演进仍在继续。 电源管理芯片被集成大部分厂商再难介入 “现在,手机的电源管理芯片市场几乎没有什么可做的了。”一家芯片厂商负责人向记者说,“原来手机中需要一些分立的电源管理芯片,如低压差线性稳压器(LDO)、直流直流转换器(DC/DC),但现在它们都被集成到手机的电源管理单元(PMU)中。而且,PMU都是由国际上大的手机套片企业供应。这样,除了新增功能外,大多数设计生产分立电源管理芯片的企业就没有什么市场了。” 这位人士进一步介
[手机便携]
为什么智能功率音频放大器对智能手机越来越重要
人们在智能手机、平板电脑或其他便携式设备上消费的内容似乎没有尽头。随着智能手机屏幕变得越来越大,越来越亮,并提供更好的整体视觉体验,消费者不仅仅通过耳机,而是正以全新的方式体验移动内容。朋友聚在一起,把手机横过来利用手机的外部喇叭看视频,分享观看和聆听的体验很常见。多年来,许多手机的屏幕尺寸变得更大,但音频体验并不总能并驾齐驱,特别是在“响亮”喇叭模式下。 因此,更多的高端手机提供立体声作为附加功能,通常在顶部和底部设置微型喇叭。 现在,当用户从侧面看其立体声增强型手机时(即横向视图),会发现两侧都有一个喇叭,以帮助创建更好的“立体声”收听体验。 智能手机和其他音频播放设备中采用立体声音频的趋势表明,音频放大器在智能手机
[物联网]
腾讯:目前还没决定是否要做智能手机
6月16日消息,中国电信2012年天翼终端交易会在广州召开,腾讯高级执行副总裁刘成敏表示,腾讯很多服务都没有搞好,因此目前暂时还没决定是否要做手机。 腾讯高级执行副总裁刘成敏 刘成敏认为,对于腾讯来说,目前把服务做的更大、与运营商合作的更好、将手机的硬件能力发挥更充分,可能是比较正确的解决之道。 2011年,由中国电信牵头,腾讯与五家手机厂商合作推出QQ-Service手机,其中与华为合作的C8500S手机销量突破百万台。刘成敏透露,在智能手机转型的大趋势下,腾讯更多的选择做“开放平台”,与终端厂商合作而不是直接竞争,这是腾讯目前的打法,今年计划还有几家手机厂商加入QQ-Service平台。 今年以来,百度
[手机便携]
联发科迪拜开设分公司 力推廉价智能手机芯片
4月4日消息,据国外媒体报道,中东和非洲许多运营商的用户数不断增长,但与此同时,灰色市场也越来越吸引智能手机商。台湾手机芯片商联发科最近在迪拜开设分公司,以满足中东和非洲市场的增长。 联发科无线业务崇拜分公司总经理格兰特·郭(Grant Kuo)说:“开设迪拜办事处,能让我们在该地区的业务增长20%。全球每三台手机中一台使用我们的芯片。我们希望将自己的体验带入这个地区,更好地支持本地伙伴。它可以帮助我们在该地区建立更好的手机生态系统。” 在中国、东南亚和印度,联发科的芯片受到许多白牌生产商的欢迎。一些白牌手机商在非洲和中东地区很活跃,如 Tecno、Smart、Smadle、G-tide、Sando、 Microma
[手机便携]
雅虎评选2017年度最佳手机 iPhone X毫无争议第一
近日,著名网站雅虎评选出了他们认为2017度的手机Top 7。 他们认为2017的是手机市场非常重要的一年,可以从其中窥见未来几年智能手机设计风格和技术发展方向。 以下是雅虎给出的Top 7名单和排名理由。 1、iPhone X,除了价格,这是最好智能手机。 2、Galaxy Note 8 ,目前最好的大屏幕智能手机。 3、Galaxy S8 ,除4.7寸iPhone 外最好的小屏智能手机。 4、iPhone 8 Plus ,性价比最好的苹果智能手机。 5、Pixel2 XL,Android粉丝能选择的最好安卓手机。 6、OnePlus 5t ,性价比优秀的安卓智能手机。 7、LG V30 ,音乐爱好者的最佳选择。
[手机便携]
三星在美国智能手机市场占有率反超苹果
近日,市场研究机构Kantar的报告显示,在今年3月到5月份,三星在美国智能手机市场的份额已经达到了36.2%,一举超过了苹果(34%),重新拿下美国手机市场占有率第一的宝座。除了苹果和三星,HTC在最鼎盛的时期也曾经高居美国市场占有率榜首。 此次三星能击败苹果的主要原因为S8系列的发布,它极大地刺激了三星手机的销量。S8的惊艳亮相使去年秋季发布的iPhone7显得有些黯然失色。 不过,Kantar还是表达了对三星的担忧,因为此次三星 S8发布时在用户中的反响明显没有过去强烈了。而且三星的领先幅度并不大,和苹果基本旗鼓相当。 iPhone 8也即将发布,它的登场很可能再次逆转在智能手机市场上的排名。
[手机便携]
今年第一季度中国智能手机市场:OPPO排名榜首
去年,我们在中国市场看到了OPPO和一加的合并,一加也宣布其旗舰产品一加9系列在中国智能手机市场使用OPPO的ColorOS。 合并似乎已经开始取得成果,随着一加10 Pro、一加9RT和OPPO Reno7系列的发布,OPPO(与一加)成功地在2022年第一季度夺得了中国智能手机出货量市场份额的榜首。 来自Strategy Analytics的一份报告称,在疫情影响的情况下,2022年第一季度中国智能手机市场同比萎缩了17%。该公司报告称,2022年第一季度,中国市场智能手机出货量为7190万部,市场主要由前5大知名智能手机品牌主导:OPPO(包括一加)、荣耀、vivo、苹果和小米。 2022年第一季度,这5大智能手
[手机便携]