最近需要实现一个在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,谢谢大家观看。