Titanium / Appcelerator / Alloy:尽管成功返回,但无法获得当前位置

时间:2017-03-28 22:26:38

标签: ios titanium appcelerator appcelerator-titanium titanium-alloy

我正在使用iPhone 4s模拟器运行以下代码:

Ti.Geolocation.getCurrentPosition(function(e){
    Ti.API.log(JSON.stringify(e));
});

上述输出的格式化版本提供以下信息:

{
    "code": 0,
    "type":"location",
    "error":"The operation couldn’t be completed. (kCLErrorDomain error 0.)",
    "source":{}, 
    "success":true
}

似乎有相当矛盾的信息。它说successtrue但是会​​给出错误消息。

此外,根据Location Results Docs,它表示如果成功,则应返回coords字段。但上面没有coords

请同时注意以下两项返回true,因此不是权限问题:

Ti.Geolocation.locationServicesEnabled; Ti.Geolocation.hasLocationPermissions(Ti.Geolocation.AUTHORIZATION_ALWAYS);

1 个答案:

答案 0 :(得分:1)

有两件事需要注意:

  1. locationServicesEnabled property for device

  2. hasLocationPermissions method

  3. 首先,您需要检查第一个属性以确保设备位置已开启。

    然后你会检查 hasLocationPermissions ,因为即使设备位置没有打开也是如此,我认为这是你的情况。

    此示例代码:

    var authType = Ti.Geolocation. AUTHORIZATION_ALWAYS;
    
    if (Ti.Geolocation.locationServicesEnabled) {
        if (Ti.Geolocation.hasLocationPermissions(authType)) {
            // voila...
        } else {
            Ti.Geolocation.requestLocationPermissions(authType, function (e) {
                if (e.success) {
                    alert('voila...');
                }
            });
        }
    
    } else {
       alert('Please turn on your device's location');
    }