android申请权限时遇到的小坑

本文探讨了在Android应用中处理权限请求的复杂性,特别是在onCreate和onResume生命周期方法中。通过实例说明了不当处理权限请求可能导致的问题,如重复请求权限及应用崩溃等,并提出了解决方案。
摘要由CSDN通过智能技术生成

最近在适配android权限的时候,遇到一个问题:

1:在Activity中的onCreate中申请了Phone、Storage权限

2:在Activity 的onResume中刷新数据时,使用到了Phone权限

3:用户进入到该activity,同意赋予了所有权限,然后点击HOME 退出到后台 ,去手动关闭Phone权限

4:点击Recent 进入到之前的Activity

由于执行了onResume,需要使用Phone权限,但是没有改权限,所以直接crash

当时的做法是,在onResume中判断权限是否存在,如果不存在,则去申请权限,调用的额方法和和onCreate相同

发现这种方法不行,在每次手动关闭权限,在从Recent中进入时,申请了两次权限,而且有次申请权限的结果直接返回了 ,还没申请权限弹框就直接返回了结果。

最终通过log发现,如果手动关闭权限,再从recent进入后,会重新走生命周期onCreate--->onResume,不是直接执行onResume,所以在onResume中再次申请权限就会存在问题。

而且不能同时在onCreate和onResume中申请权限,因为申请权限时异步的,在onCreate中申请后还没有返回结果时,就会执行onResume,如果onResume中有存在需要获取权限才能执行的操作时,就会发生crash。

解决方案:

1:申请权限最好在onResume中申请

2:如果因为重新执行了onCreate  界面显示问题 可以从savedInstanceState中获取数据,并恢复

3:如果onCreate中申请权限,在onResume中就要进行权限是否获取判断,但是不能在onResume中再次申请,可以将onResume中相关操作,放入onCreate申请权限的结果中进行执行

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值