2014-01-28 24 views
3

我正在使用geofences on android,它在大多数手机上工作正常, 但在其中一些上,它只是不起作用(在我的错误日志中显示“geofences not available” )。Geofences不可用以及如何处理

某些用户没有为Google Play服务启用其位置跟踪功能。 我认为这就是为什么geofencing不能在他们的手机上工作的原因。 (对吧?)

现在我想要一种方法来检测这个。 (通知用户,并最终告诉他们如何解决这个问题) 我知道有一种方法可以知道谷歌播放服务是否可用(我已经这样做了),但这并没有说任何关于位置服务的信息启用或不启用。

我知道我可以在添加或删除地理栅栏时检查它,但它有一个错误代码(地理栅栏不可用Location Status Codes),但这还不够。 某些用户在之后禁用位置服务他们添加了地理围栏。然后我无法知道这一点,我的应用程序将无法正常工作。 (抱怨用户等)。 至少我必须通知用户,当他们打开应用程序来检查什么是错的。

有人有关于如何做到这一点的想法吗? 我现在能做的最好的事情是在应用程序启动时添加和删除虚拟地理栅栏,但是必须有更好的方法?

编辑: 我与有问题的设备进行了测试,删除应用并重新安装,似乎解决这个问题。 我在第一次启动时没有做任何特别的事情,所以这真的很奇怪。 看起来好像谷歌播放服务连接出现问题,重新安装应用程序对这些服务做了一些特殊的处理。 这可能吗?它连接到它们时不会出现错误,但它在我尝试设置地理围栏时发生(请参阅上文)。

回答

5

如果GPS提供商或网络提供商因任何原因被禁用,地理围栏将被禁用(和未注册)。这会导致你的onAddGeofencesResult()被错误状态代码(1000)调用。你可以在那里检测到它。

或者,您通过实现一个接收方来检测此问题,该接收方将响应android.location.PROVIDERS_CHANGED而被调用。记得到接收器添加到AndroidManifest

<receiver android:name=".service.GeofenceProvidersChangedBroadcastReceiver"> 
    <intent-filter> 
     <action android:name="android.location.PROVIDERS_CHANGED"/> 
    </intent-filter> 
</receiver> 

在接收器实现,其onReceive(),得到外景经理和测试的供应商身份:

public class ProvidersChangedBroadcastReceiver extends WakefulBroadcastReceiver { 

    : 
    : 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 

     if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
      // GPS_PROVIDER IS enabled... 
     } else { 
      // GPS_PROVIDER is NOT enabled... 
     } 

     if (locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) { 
      // NETWORK_PROVIDER IS enabled... 
     } else { 
      // NETWORK_PROVIDER is NOT enabled... 
     } 

     : 
     : 
     : 

     if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) && 
     locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) { 
     // We are good for geofencing as both GPS and Network providers are enabled.... 
    } 

    : 
    : 
    : 

} 
+0

我的错误实际上是2两件事的组合:上面的答案(一些用户没有启用传感器),而且事实上,如果用户强制退出应用程序(在应用程序切换器菜单中刷掉),地理栅栏将被删除 – Quentin

相关问题