我们使用 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/