【发布时间】:2018-09-11 01:24:39
【问题描述】:
我开发了一个 Android 混合应用程序,它在其他活动中跟踪用户位置并将其显示给用户,显示他们最近去过的地方。这通过以 10 秒的更新速率调用 LocationServices.FusedLocationApi.requestLocationUpdates 来实现。
显然这需要位置权限,对于 ANDROID Marshmallow 及更高版本,我在请求位置更新之前检查并请求用户提供必要的位置权限。
我已经阅读了许多关于同一主题的其他 StackOverflow 问题,但我还没有找到一个令人满意的答案,即如果用户在最初授予应用程序的位置权限后撤销了该应用程序的位置权限,则防止 Android 终止该应用程序。
我会非常高兴应用程序停止显示用户的位置和轨迹,毕竟用户已经要求停止它,但我不高兴应用程序被终止,正如我之前所说该应用程序在后台运行时为用户执行许多其他操作。
据我了解,一旦撤销位置权限,没有回调可用于让我删除位置更新。如何更改策略以避免应用崩溃?
我并不希望用户经常这样做,但我认为让应用程序尽可能防弹是一种很好的做法。请不要提醒我 Android 可以在后台终止任何应用程序,因为这不是我的问题。
我是否需要采用单一而不是定期的方法来请求位置,以便我每次都可以重新检查权限是否存在。
还是尝试捕获错误更好。如果是这样,我在哪里做?会在 onLocationChanged 里面吗?
【问题讨论】:
-
“我怎样才能改变我的策略来避免应用程序崩溃?”——不清楚你认为你的应用程序会在哪里崩溃。当用户撤销运行时权限时,您的进程将被终止。当用户再次运行您的应用程序时,您检查运行时权限并采取适当的步骤。崩溃的场景到底是什么? “顺便说一句,有人对这个问题投反对票的速度比他们阅读它的速度还快。” ——如果我不得不猜测,那是你最初的全大写标题。但是,这只是一个猜测。
-
谢谢。我想知道是不是也这样,但我没有发现它,我花了几秒钟才纠正它。
-
我所说的应用程序崩溃是指进程被终止(我已经检查过,这确实发生了)。现在这会给用户带来我希望避免的问题。首先,他们必须重新登录,因为 Web 应用程序数据已加密并且需要密码才能解密。其次,这将停止所有进出我的服务器的通信流量。第三,用户将不知道应用程序停止工作的原因。如果有任何方法可以做到这一点,我想做的是防止进程终止。
标签: android geolocation android-permissions hybrid-mobile-app permission-denied