navigator.geolocation.getCurrentPosition Cordova API方法适用于我的iPhone上安装的Monaca Debugger / App Emulator,但在同一部手机上的内置iOS版本中冻结。
我在config.xml中添加了以下内容,但它没有解决问题。
<feature name="Geolocation">
<param name="ios-package" value="CDVLocation" />
</feature>
答案 0 :(得分:0)
我只是想重现你的问题。很遗憾,您发布的信息较少所以我建立了一个新的cordova项目:
cordova create geolocationTest com.example.com geolocationTest
cd geolocationTest
cordova platform add ios
cordova plugin add cordova-plugin-geolocation
cordova build
然后我移动到该文件夹并编辑了index.html。我添加了这段代码:
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
console.log("navigator.geolocation works well");
}
之后我添加了Geolocation-Plugin Documentation中的Example:
// onSuccess Callback
// This method accepts a Position object, which contains the
// current GPS coordinates
//
var onSuccess = function(position) {
alert('Latitude: ' + position.coords.latitude + '\n' +
'Longitude: ' + position.coords.longitude + '\n' +
'Altitude: ' + position.coords.altitude + '\n' +
'Accuracy: ' + position.coords.accuracy + '\n' +
'Altitude Accuracy: ' + position.coords.altitudeAccuracy + '\n' +
'Heading: ' + position.coords.heading + '\n' +
'Speed: ' + position.coords.speed + '\n' +
'Timestamp: ' + position.timestamp + '\n');
};
// onError Callback receives a PositionError object
//
function onError(error) {
alert('code: ' + error.code + '\n' +
'message: ' + error.message + '\n');
}
navigator.geolocation.getCurrentPosition(onSuccess, onError);
这对我来说都很好。所以问题必须在你的代码中的任何地方。您应该提供更多信息。
答案 1 :(得分:0)
我想我发现了问题。 iOS8在app plist中需要以下内容:
<key>NSLocationWhenInUseUsageDescription</key>
<string></string>
<key>NSLocationAlwaysUsageDescription</key>
<string></string>
需要在调用navigator.geolocation.getCurrentPosition之前调用和locationManager.requestAlwaysAuthorization或locationManager.requestWhenInUseAuthorization。 以下说明iOS8的更改:http://nevan.net/2014/09/core-location-manager-changes-in-ios-8/
我现在遇到的当前问题是在Monaca环境中成功调用locationManager.requestAlwaysAuthorization或locationManager.requestWhenInUseAuthorization。