Appcelerator如何查看定位服务是否开启

How to check if the location service is enabled or not in Appcelerator

能否请您帮我检查一下Appcelerator中是否启用了定位服务。 我正在使用 Titanium SDK 6.1.2 和带有 Marshmellow OS 的三星 S5。即使 GPS 在设备中是 enabled/not,但每次都会导致错误。 提前致谢。

首先,您需要检查 Android 中应用程序的 位置权限 ,然后您需要检查设备中是否启用了位置服务。

两者是不同的说法。

第一个检查应用访问位置的权限,第二个检查位置服务是否打开。

如果不首先在 Android 上检查 位置权限 ,您将无法检查位置 on/off 状态,否则它总是会导致 false状态。

首先在 ios -> plist -> dict

中添加 tiapp.xml
<key>NSLocationAlwaysUsageDescription</key>
<string>Determine Current Location</string>

下面是 Android/iOS 的交叉兼容代码。

function checkLocationEnabledOrNot(_callback, _args) {
    if (Titanium.Geolocation.locationServicesEnabled) {
        _callback(_args);

    } else {
        alert("Turn on location on your device.");
    }
}


// pass _callback method you want to call after successful access to location
// you can also pass arguments as 2nd parameter to the function you want to call

function startLocationProcess(_callback, _args) {
    Ti.Geolocation.accuracy = Ti.Geolocation.ACCURACY_HIGH;

    if (OS_IOS) {
        checkLocationEnabledOrNot(_callback, _args);

    } else if (OS_ANDROID) {
        if (Ti.Geolocation.hasLocationPermissions()) {
            checkLocationEnabledOrNot(_callback, _args);

        } else {
            Ti.Geolocation.requestLocationPermissions(Ti.Geolocation.AUTHORIZATION_ALWAYS, function (locationEvent) {
                if (locationEvent.success) {
                    checkLocationEnabledOrNot(_callback, _args);

                } else {
                    alert("Location permissions are required to access locations.");
                }
            });
        }
    }
}

现在,在一个按钮上点击你想在位置检查后做的任何事情,你可以简单地这样做:

function anotherFunction(name) {
    alert(name);
}


$.someButton.addEventListener('click', function (e) {
    startLocationProcess(anotherFunction, "Hello D.Ish");
});