我在模拟器(甚至当我通过远程登录geo fix
时)和设备上都很难让地理定位在Android上工作。适用于iOS、WP8和浏览器。
当我使用下面的代码询问设备的位置时,我总是得到一个错误(在我的例子中,错误代码和错误消息都是带有null
的自定义Retrieving your position failed for unknown reason.
)。
相关代码:
successHandler = (position) ->
resolve App.Location.create
lat: position.coords.latitude
lng: position.coords.longitude
errorHandler = (error) ->
error = switch error.code
when 1
App.LocationError.create
message: 'You haven\'t shared your location.'
when 2
App.LocationError.create
message: 'Couldn\'t detect your current location.'
when 3
App.LocationError.create
message: 'Retrieving your position timeouted.'
else
App.LocationError.create
message: 'Retrieving your position failed for unknown reason. Error code: ' + error.code + '. Error message: ' + error.message
reject(error)
options =
maximumAge: Infinity # I also tried with 0
timeout: 60000
enableHighAccuracy: true
navigator.geolocation.getCurrentPosition(successHandler, errorHandler, options)
platforms/android/AndroidManifest.xml
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
www/config.xml (以防万一)
<feature name="Geolocation">
<param name="android-package" value="org.apache.cordova.GeoBroker" />
</feature>
使用Cordova 3.1.0。在Android 4.2上进行测试。已安装插件。index.html中包含的Cordova.js ( InAppBrowser等其他插件运行良好)。
$ cordova plugins ls
[ 'org.apache.cordova.console',
'org.apache.cordova.device',
'org.apache.cordova.dialogs',
'org.apache.cordova.geolocation',
'org.apache.cordova.inappbrowser',
'org.apache.cordova.vibration' ]
我一无所知。我是不是遗漏了什么?
发布于 2014-03-26 22:51:27
尝试这样的选项,看看它是否适用于您,就像我一样:
var options = { enableHighAccuracy: true };
navigator.geolocation.getCurrentPosition(onSuccess, onError, options);
发布于 2014-04-30 15:25:29
我的解决方案是使用安卓/三星的原生HTML5地理定位支持:
// BEFORE the deviceready event has fired:
// Check if HTML5 location support exists
app.geolocation = false;
if(navigator.geolocation) {
app.geolocation = navigator.geolocation;
}
// AFTER the deviceready event:
if(app.geolocation) {
var locationService = app.geolocation; // native HTML5 geolocation
}
else {
var locationService = navigator.geolocation; // cordova geolocation plugin
}
locationService.getCurrentPosition(
function(pos) {
},
function(error) {
},
{enableHighAccuracy: true, timeout: 15000}
);
对于我测试过的所有三星设备,enableHighAccuracy必须是“真的”才能工作。对于非三星设备,比如Nexus7,enableHighAccuracy也可以设置为“false”。
发布于 2014-06-25 22:01:23
根据https://issues.apache.org/jira/browse/CB-5977的说法,安卓插件的支持已经被移除。易明宽说:“我们使用CB-5977的原因是,新的安卓版本的网页视图将比本地应用程序接口更快地获得GPS锁定,因此删除了它。在安卓系统上添加这个插件只是增加了在你的应用程序中使用HTML5地理定位的必要权限。”
https://stackoverflow.com/questions/19491875
复制相似问题