大致代码是这样的:
navigator.geolocation.getCurrentPosition(
//onSuccess
function(position) {
//百度LBS云检索
joFile(
'http://api.map.baidu.com/geosearch/poi?location=' + position.coords.latitude + ',' + position.coords.longitude + '&filter=databox:xxx&scope=2&ak=' + TOG.BaiduAppKey,
function(data, error) {
if(error) {
//display the error
return;
} else {
result = JSON.parse(data);
for(var i = 0; i < result.size; i++) {
//handle the data returned
}
}
}
);
},
//onError
function(error) {
console.dir(error);
alert(error.message);
},
//options
{ enableHighAccuracy: true }
);
在chrome上调试的时候弹出“User Denied Geolocation”,将chrome设置为允许任何网站获取位置,错误依旧出现。stackoverflow上说是因为chrome的安全策略,会组织file:///开头的网页获取用户地理位置。
于是我在android emulator中测试,错误依旧出现。
于是考虑是不是去权限问题,按照官方文档中的做法又重新设置了一遍权限(虽然我明明已经设置好了):
app/res/xml/config.xml
<plugin name="Geolocation" value="org.apache.cordova.GeoBroker" />
app/AndroidManifest.xml
<uses-permission android:name="android.permission.ACCESSCOARSELOCATION" />
<uses-permission android:name="android.permission.ACCESSFINELOCATION" /> <uses-permission android:name="android.permission.ACCESSLOCATIONEXTRA_COMMANDS" />
悲催的是错误依旧出现。
stackoverflow上又说是www目录下缺少config.xml,复制过去,错误依旧出现。
stackoverflow上又说是ddms没设置gps,于是我直接打包成apk真机调试。
错误依旧出现。
我觉得这应该是有解决方法的。虽然phonegap文档中说:
This API is based on the W3C Geolocation API Specification. Some devices (Android, BlackBerry, Bada, Windows Phone 7, webOS and Tizen, to be specific) already provide an implementation of this spec. For those devices, the built-in support is used instead of replacing it with Cordova's implementation. For devices that don't have geolocation support, the Cordova implementation adheres to the W3C specification.
这。。。
如果你去看phonegap的源碼你會發現 { enableHighAccuracy: true } 這個參數有特殊處理,表示是否獲得更高的精確度。
設定為true,在內部會呼叫GPS模組,也會是GPS定位。你GPS沒開啟呢,所以報錯了。如果不想開啟GPS,把這個設定為false吧。 。
其實設定為false表示透過手機網路定位,為true是GPS定位。