首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android应用程序崩溃,原因是位置权限被取消,无法设置

Android应用程序崩溃,原因是位置权限被取消,无法设置
EN

Stack Overflow用户
提问于 2017-12-23 07:48:31
回答 2查看 3K关注 0票数 2

我们使用android后台服务进行位置跟踪,注册融合的google定期更新位置。当我们为位置更新启动服务时,我们请求位置许可,如果用户接受,则启动服务并注册融合的google。

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

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

如何处理这种情况?

EN

回答 2

Stack Overflow用户

发布于 2019-06-26 05:40:30

,这不是一个bug,,这是一个Android6 (Marshmallow)和上面的问题,或者我们可以说是特性。这是因为通过Android Marshmallow,Google改变了用户对危险的权限(比如位置权限)的访问方式,并且他们现在有能力撤销它。在您的示例中,所发生的情况是savedInstanceState值变得无效,因为您的应用程序进程在撤销权限后被终止并重新启动。

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

票数 5
EN

Stack Overflow用户

发布于 2017-12-23 09:26:39

在您的主要活动中添加此方法,并在您的onCreate()方法中调用它;

代码语言:javascript
运行
复制
public boolean havePermission() {
        if (Build.VERSION.SDK_INT >= 23) {
            if (checkSelfPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED && checkSelfPermission(android.Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
                return true;
            } else {
                ActivityCompat.requestPermissions(this , new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, 1);
                return false;
            }
        }
        else {
            return true;
        }
    }

不要忘记在您的mainifest.xml中添加thoes两个权限

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47950773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档