Android中onActivityResult重复调用及录屏权限授权异常问题
原因分析与解决方案
核心原因
你的CountDownTimer存在重复触发请求的逻辑:在onTick方法中手动调用了onFinish(),而CountDownTimer本身会在倒计时结束时自动执行onFinish(),这导致两次调用startActivityForResult发起录屏权限请求:
- 第一次:倒计时剩余时间小于1100ms时,手动触发
onFinish()发起请求; - 第二次:倒计时正常结束后,系统自动调用
onFinish()再次发起请求。
当系统接收到第二次权限请求时,会自动取消第一次未完成的请求(对应日志中resultCode=0,即RESULT_CANCELED),你实际操作的是第二次请求,所以第二次返回resultCode=-1(即RESULT_OK),最终onActivityResult被调用两次。
修复方案
删除onTick方法中手动调用onFinish()的逻辑,让CountDownTimer自动在倒计时结束时执行onFinish(),修改后的onTick代码如下:
@SuppressLint("SetTextI18n") @Override public void onTick(long millisUntilFinished) { int second = (int) (millisUntilFinished / 1000); txtTesterCounter.setText(App.enToFa(second + "")); }
修改后只会发起一次录屏权限请求,onActivityResult也只会被调用一次,且返回正确的结果码。
内容的提问来源于stack exchange,提问作者Dr.KeyOk
相关产品推荐
相关产品推荐

