如何在启动位置服务后撤消Android位置权限

时间:2018-04-01 17:47:01

标签: android geolocation android-permissions hybrid-mobile-app permission-denied

我开发了一个Android混合应用程序,其中包括跟踪用户位置的其他活动,并将其显示给用户,显示他们最近的位置。这可以通过以10秒的更新速率调用LocationServices.FusedLocationApi.requestLocationUpdates来实现。

显然这需要位置许可,对于ANDROID Marshmallow及以上,我在请求位置更新之前检查并请求用户提供必要的位置权限。

我已经阅读了很多关于同一主题的其他StackOverflow问题但是我没有找到一个令人满意的答案,如果用户在最初授予后撤销了应用程序的位置权限,则阻止Android终止应用程序。

我很高兴应用程序停止显示用户的位置和跟踪,在所有用户要求停止之后,但我对应用程序被终止感到不满意,正如我之前所说应用程序在后台运行时为用户执行许多其他操作。

据我所知,没有回调可用于允许我在撤销位置权限后立即删除位置更新。我怎样才能改变策略以避免应用程序崩溃?

并不是我希望用户经常这样做,但我认为将应用程序尽可能地防范是一种很好的做法。请不要提醒我Android可以在后台终止任何应用程序,因为这不是我的问题。

我是否需要采用单一而非周期性的方法来请求位置,以便每次都可以重新检查权限。

或者尝试捕获错误更好。如果是这样,我该怎么做?它会在onLocationChanged里吗?

如果有人想要关注这个问题,请先请他们先添加评论来解释原因。顺便说一下,有人只是比他们读过这个问题的速度更快。谁这样做?

2 个答案:

答案 0 :(得分:0)

  

我的意思是应用程序崩溃是程序终止(我已经检查过,这实际上发生了)

当用户撤销运行时权限时,这是完全正常的。

  

我想做的是,如果有任何办法可以阻止流程终止。

抱歉,这是不可能的。

由于我怀疑很少有用户甚至知道他们可以撤销运行时权限,所以这不常见,恕我直言。

答案 1 :(得分:0)

  

Blockquote    但是,Android开发人员为什么不仅仅导致生成回调以允许应用程序代码库做出反应

您可以在BroadcastReceiver中注册LocationManager.PROVIDERS_CHANGED_ACTION。 当它被点击时,您可以检查该提供程序是否仍处于启用状态,并相应地使用它来防止您的应用在有人撤消位置许可时崩溃。

LocationManager locationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE);
    boolean enabled = locationManager != null && locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);