基于Google Map Api的Android导航应用
可以访问文件
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()方法按照用户输入地址解析而得到。*/
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);
}
});
}
通过上述的操作我们基本上实现了线路规划,在此基础上我们能够添加更多的功能,如语音导航、路况提示、周边配套设施提示等,使用户获得更好的用户体验。最终效果如下图所示:
六、结束语
Google Maps 作为最早的网上电子地图服务,其强大的功能和开放的API ,使得我们能够在其基础上二次开发出很好的应用。具有很大的商用价值。该系统还存在网页载入速度较慢、语音提示功能等问题,还有待进一步研究和开发。
- 想做谷歌眼镜开发者 需要注意11点(05-04)
- 机器人时代:无人驾驶的野心(02-16)
- 炫酷!EnOcean无线无源控制面板运用到别墅设计案例(04-09)
- 【低成本】手把手教你制作Google Cardboard虚拟现实眼镜(06-22)
- SHIELD TV 支持 Google Assistant 服务(09-19)
- Android智能手机平台多分辨率解决方案详解(02-14)