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

标签 android service crash android-permissions android-fusedlocation

我们使用 Android 后台服务进行位置跟踪,其中注册 fused google api 进行定期位置更新。 当我们必须启动位置更新服务时,我们会请求位置权限,如果用户接受,我们就会启动服务并注册 fused google api。

但现在出现的问题是,一旦用户接受了权限并注册了位置更新的融合位置 API,后来用户就从应用程序的设备设置中撤销了位置权限。 一旦用户执行此操作,应用程序就会因

而开始崩溃

java.lang.SecurityException: Client must have ACCESS_FINE_LOCATION permission to request PRIORITY_HIGH_ACCURACY locations.

遇到这种情况该如何处理?

最佳答案

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

一个可能的修复方法是将 null 传递给 Activity 的 onCreate()。这是因为即使您的进程被终止,savedInstanceState 仍然保留并在您返回应用程序后返回。如果您在没有打开应用程序的情况下执行相同的操作,它不会崩溃,因为 savedInstanceState 为 null。但如果后台服务正在执行某些位置任务,一旦您从设备设置中撤销位置权限,应用程序就会崩溃。

关于Android - 由于位置权限从设置中撤销而导致应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47950773/

相关文章:

sql-server - 部署 WCF 服务

android - AlarmManager 在服务中不工作 - Android

android - 如何访问 android 11 (Scoped storage) 中的 whatsapp/media 目录?

Android 双向数据绑定(bind)与 onclick() 不起作用

c# - 在一台服务主机中托管多个服务?

c# - 后台线程上的 new System.Transactions.TransactionScope() 会停止程序

crash - 应用程序在iOS 7上崩溃,但在iOS 6上运行良好

ios - glReadPixels 在 iOS 上崩溃

java - 闹钟应用程序防止系统时间更改

android - React-Native 弹性盒重叠所需的最小高度?