利用HTML5开发Android(5)---HTML5地理位置服务在Android中的应用
Android中
Java代码
1 //启用地理定位 2 webSettings.setGeolocationEnabled(true); 3 //设置定位的数据库路径 4 webSettings.setGeolocationDatabasePath(dir); 5 6 //配置权限(同样在WebChromeClient中实现) 7 public void onGeolocationPermissionsShowPrompt(String origin, 8 GeolocationPermissions.Callback callback) { 9 callback.invoke(origin, true, false); 10 super.onGeolocationPermissionsShowPrompt(origin, callback); 11 }
在Manifest中添加权限
Xml代码
1 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 2 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
HTML5中 通过navigator.geolocation对象获取地理位置信息
常用的navigator.geolocation对象有以下三种方法:
1 //获取当前地理位置 2 navigator.geolocation.getCurrentPosition(success_callback_function, error_callback_function, position_options) 3 //持续获取地理位置 4 navigator.geolocation.watchPosition(success_callback_function, error_callback_function, position_options) 5 //清除持续获取地理位置事件 6 navigator.geolocation.clearWatch(watch_position_id)
其中success_callback_function为成功之后处理的函数,error_callback_function为失败之后返回的处理函数,参数position_options是配置项
在JS中的代码
Js代码
1 //定位 2 function get_location() { 3 if (navigator.geolocation) { 4 navigator.geolocation.getCurrentPosition(show_map,handle_error,{enableHighAccuracy:false,maximumAge:1000,timeout:15000}); 5 } else { 6 alert("Your browser does not support HTML5 geoLocation"); 7 } 8 } 9 10 function show_map(position) { 11 var latitude = position.coords.latitude; 12 var longitude = position.coords.longitude; 13 var city = position.coords.city; 14 //telnet localhost 5554 15 //geo fix -82.411629 28.054553 16 //geo fix -121.45356 46.51119 4392 17 //geo nmea $GPGGA,001431.092,0118.2653,N,10351.1359,E,0,00,,-19.6,M,4.1,M,,0000*5B 18 document.getElementByIdx_x_x_x("Latitude").innerHTML="latitude:"+latitude; 19 document.getElementByIdx_x_x_x("Longitude").innerHTML="longitude:"+longitude; 20 document.getElementByIdx_x_x_x("City").innerHTML="city:"+city; 21 } 22 23 function handle_error(err) { 24 switch (err.code) { 25 case 1: 26 alert("permission denied"); 27 break; 28 case 2: 29 alert("the network is down or the position satellites can't be contacted"); 30 break; 31 case 3: 32 alert("time out"); 33 break; 34 default: 35 alert("unknown error"); 36 break; 37 } 38 }
其中position对象包含很多数据 error代码及选项 可以查看文档