Android - 由于位置权限从设置中撤销而导致应用程序崩溃

Pan*_*kaj 2 crash service android android-permissions android-fusedlocation

我们正在使用 android 后台服务进行位置跟踪,其中注册融合的 google api 以进行定期位置更新。当我们必须启动位置更新服务时,我们会请求位置许可,如果用户接受,则我们启动服务并注册 fused google api。

但是现在问题来了,一旦用户接受权限并融合位置 api 注册位置更新,后来用户从应用程序的设备设置中撤消了位置权限。一旦用户这样做,应用程序开始崩溃,因为

java.lang.SecurityException:客户端必须具有 ACCESS_FINE_LOCATION 权限才能请求 PRIORITY_HIGH_ACCURACY 位置。

如何处理这种情况?

Akk*_*kki 5

这不是一个错误。这是 Android 6 (Marshmallow) 及以上的问题,或者我们可以说是功能。这是因为从 Android Marshmallow 开始,谷歌改变了用户授予访问危险权限(如位置权限)的方式,并且他们现在可以撤销它。在您的情况下,发生的情况是该savedInstanceState值无效,因为您的应用程序进程在您撤销权限后被终止并重新启动。

一种可能的解决方法是将 null 传递给onCreate()活动的 。这是因为即使在您的进程被终止后,它savedInstanceState仍然存在并在您返回应用程序后返回。如果你在没有打开应用程序的情况下做了同样的事情,它不会崩溃,因为它savedInstanceState是空的。但是,对于正在执行位置任务的后台服务,一旦您从设备设置中撤销位置权限,应用程序就会崩溃。