Cordova geolocation.getCurrentPosition适用于Monaca iPhone调试器但不适用于内置的iOS应用程序

时间:2015-04-23 02:37:12

标签: ios iphone cordova geolocation monaca

navigator.geolocation.getCurrentPosition Cordova API方法适用于我的iPhone上安装的Monaca Debugger / App Emulator,但在同一部手机上的内置iOS版本中冻结。

我在config.xml中添加了以下内容,但它没有解决问题。

<feature name="Geolocation">
    <param name="ios-package" value="CDVLocation" />
</feature> 

2 个答案:

答案 0 :(得分:0)

我只是想重现你的问题。很遗憾,您发布的信息较少所以我建立了一个新的cordova项目:

  1. cordova create geolocationTest com.example.com geolocationTest
  2. cd geolocationTest
  3. cordova platform add ios
  4. cordova plugin add cordova-plugin-geolocation
  5. cordova build
  6. 然后我移动到该文件夹​​并编辑了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。