gpt4 book ai didi

Android 12 - 存储访问框架/范围存储不再工作

转载 作者:行者123 更新时间:2023-12-04 23:42:58 27 4
gpt4 key购买 nike

安卓 12 最近在一些手机上发布,一些用户开始提示存储访问权限:他们不能再授予应用程序对特定文件夹的访问权限(例如,“下载”文件夹)。
消息指示: “无法使用此文件夹。为保护您的隐私,请选择另一个文件夹”。
这个问题很容易重现,我花了一些时间寻找解决方案,但我找不到一个简单的解决方案。
Image of the issue
似乎唯一的解决方法是要求完全存储访问权限(但这不是我想要做的,这很糟糕)或要求用户创建一个新文件夹,这将是 UX 绝对的痛苦。
我不明白的是:谷歌只是 - 没有任何文档 - 在 Android 12 上弃用了 SAF 吗?这是一个错误还是一个功能?我真的很困惑那里。 Android 11 迁移已经很痛苦了,现在恐怕 12 会变得更加痛苦。
这是代码,但没什么特别的:

    /*
* Requests Scoped Storage access authorization
*/
@RequiresApi(Build.VERSION_CODES.Q)
@JvmStatic
fun requestScopedStorageAccess(activity: Activity, requestCode: Int) {
val storageManager = activity.getSystemService(Context.STORAGE_SERVICE) as StorageManager
val intent = storageManager.primaryStorageVolume.createOpenDocumentTreeIntent()
activity.startActivityForResult(intent, requestCode)
}
我认为值得注意的是,一切都在 Android 10 和 11 上完美运行,所以问题确实与 Android 12 有关。

最佳答案

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
StorageManager sm = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE);

Intent intent = sm.getPrimaryStorageVolume().createOpenDocumentTreeIntent();

String startSubDir = "Android%2Fdata";

Uri uri = intent.getParcelableExtra("android.provider.extra.INITIAL_URI");

String scheme = uri.toString();

Log.d(TAG, "INITIAL_URI scheme: " + scheme);

scheme = scheme.replace("/root/", "/document/");

scheme += "%3A" + startSubDir;
Log.d(TAG, "INITIAL_URI scheme: " + scheme);

uri = Uri.parse(scheme);

intent.putExtra("android.provider.extra.INITIAL_URI", uri);

Log.d(TAG, "uri: " + uri.toString());

((Activity) getActivity()).startActivityForResult(intent, REQUEST_ACTION_OPEN_DOCUMENT_TREE);

return;
}

关于Android 12 - 存储访问框架/范围存储不再工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69873673/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com