Appcelerator Titanium Ti.Geolocation.addEventListener(' location',{});关闭gps

时间:2017-02-27 13:50:10

标签: gps titanium appcelerator

每当我打开或关闭移动设备中的 gps 时,我都需要更改图标颜色。目前,当我打开或关闭gps时,我正在使用Ti.Geolocation.addEventListener('location',{});进行触发。当我在gps上时它会触发,但是当我关闭gps时它不会触发。我在 android iOS 中都需要此功能,它在两者中都不起作用。

为什么当我们关闭gps时这个api没有触发?任何其他解决方法。

2 个答案:

答案 0 :(得分:0)

我认为他们没有这样的事件监听器可以在GPS关闭时触发,而是你可以尝试下面的代码并看看它是否能解决你的目的:

exports.testGPS = function(_callback) {
    Ti.Geolocation.purpose = "Recieve User Location";
    Ti.Geolocation.accuracy = Titanium.Geolocation.ACCURACY_BEST;
     if (_callback && typeof(_callback)==='function') {
        Ti.Geolocation.getCurrentPosition(function(e) {
                _callback ((e.error) ? false: true);
        });    
    }
}
  

您可以根据需要更新此功能。它会   当它获得并且在恢复当前时出错时通过false   设备的位置,因此我们可以得出GPS的结论   设置已关闭。

祝你好运, 干杯

修改

您可以使用广播接收器执行此操作,请参阅以下内容:

  

更改tiapp.xml中的清单

<intent-filter>
    <action android:name="android.location.PROVIDERS_CHANGED" />
    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>
  

创建广播接收器并在index.js中注册

var bc = Ti.Android.createBroadcastReceiver({
    onReceived: function() {
        Ti.API.info('Handling broadcast.');
    }
});

Ti.Android.registerBroadcastReceiver(bc, [Ti.Android.ACTION_PROVIDER_CHANGED]);

答案 1 :(得分:0)

如果你听位置转换器     Ti.Geolocation.addEventListener('location',function(response){}); 你有一个事件,当位置改变时和gps设置开或关

当你关闭gps时,你有这个回应是

Android上的

 {
  "type": "location",
  "source": {
    "bubbleParent": true,
    "hasCompass": true,
    "__propertiesDefined__": true,
    "preferredProvider": "gps",
    "Android": {
      "bubbleParent": true,
      "manualMode": false,
      "apiName": "Ti.Geolocation.Android"
    },
    "lastGeolocation": "{\"latitude\":36.4880079,\"longitude\":2.8170365,\"altitude\":0,\"accuracy\":42.5,\"heading\":0,\"speed\":0,\"timestamp\":1488278209059}",
    "_events": {
      "location": {}
    },
    "locationServicesEnabled": false,
    "accuracy": 1,
    "apiName": "Ti.Geolocation"
  },
  "bubbles": false,
  "success": true,
  "code": 0,
  "error": "network is disabled",
  "cancelBubble": false
}
iOS上的

{
  "bubbles": true,
  "type": "location",
  "source": {
    "preferredProvider": null
  },
  "success": false,
  "code": 1,
  "error": "location",
  "cancelBubble": false
}

当应用程序恢复时,iOS上的事件被触发,在我的情况下,我在应用程序处于后台时跟踪GPS,在tiapp.xml中添加此内容

<key>UIBackgroundModes</key>
<array>
     <string>location</string>
</array>

你可以找到gps状态 for response.source.locationServicesEnabled中的android 并在iOS上检查状态或权限response.error

if(response.error){
   if(!Ti.Geolocation.locationServicesEnabled){
      //GPS desactivate
   }else if(Ti.Geolocation.hasLocationPermissions(Ti.Geolocation.AUTHORIZATION_ALWAYS) || Ti.Geolocation.hasLocationPermissions(Ti.Geolocation.AUTHORIZATION_WHEN_IN_USE)){
      //no authorised
  }
}

如果您想要强制更改图标颜色,即使您没有位置事件,请在窗口的onFocus事件中检查GPS状态和自动化,它包含图标