04-AndroidQ及以上版本给x应用设置动态返回权限时总返回null的处理

本文介绍了如何解决Android Q上相机应用中设置照片存储位置的问题。通过调整代码使用新的API,实现了点击设置后能正确弹出请求外部存储权限的对话框,并成功将照片保存到SD卡。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近需要实现一个在androidQ上相机添加可设置存储位置为sd卡或机身的开关。
(其实功能在android9.0已经实现了,直接Merge过来发现点击设置的存储到sd卡后功能无法实现,用9.0的机器试了一下,发现点击后会出现一个动态访问权限的弹窗,提示要获取读取sd卡的权限,而在androidQ上则不会出现)
经过打Log发现在

    private void createAccessPermission(String path) {
        StorageVolume storageVolume = mStorageManager.getStorageVolume(new File(path));
        Intent intent = storageVolume.createAccessIntent(null);
        Log.d(TAG,"intent"+intent);
        intent.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
        mApp.getActivity().startActivityForResult(intent,      CameraActivity.EXTERNAL_ACCESS_PERMISSION_CODE);
    }

中intent返回值一直为null
后经排查发现storageVolume.createAccessIntent(null);在AndroidQ及以上版本被移除了

/*Note: 10.0 or higher, createAccessIntent is deprecated.
Callers should migrate to using createOpenDocumentTreeIntent{@link Intent#ACTION_OPEN_DOCUMENT_TREE} instead*/

根据提示,替换代码

//Intent intent = storageVolume.createAccessIntent(null);
 Intent intent = storageVolume.createOpenDocumentTreeIntent();

后编译运行,点击打开sd卡存储,会弹出访问sd卡的动态权限,给了权限后,即可实现拍照存储在sd卡上了。

总结
版本升级后有些方法不一定管用,多关注版本更新后方法的更新和实现,多看官方API,谢谢大家观看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值