android - 用户第一次使用我的应用程序时如何设置 ACTION_OPEN_DOCUMENT_TREE 启动路径?
问题描述
我已经看到很多关于设置开始的问题,uri
但Intent.ACTION_OPEN_DOCUMENT_TREE
所有这些都需要一个uri
来自之前使用过该文件夹选择器的问题。
我想要做的是Download
在选择文件夹时将我的用户直接发送到该文件夹,但我不知道如何转换/storage/emulated/0/Download
为uri
我可以使用DocumentsContract.EXTRA_INITIAL_URI
.
有没有办法将任何文件路径转换为DocumentsContract
样式uri
?
编辑:为了清楚起见,我说的是uri
通过这里:
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE)
.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED)
.putExtra(DocumentsContract.EXTRA_INITIAL_URI, uri)
解决方案
我们操纵 .createOpenDocumentTreeIntent() 的 INITIAL_URI。
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 startDir = "Android";
//String startDir = "Download"; // Not choosable on an Android 11 device
//String startDir = "DCIM";
// String startDir = "DCIM/Camera"; // replace "/", "%2F"
String startDir = "DCIM%2FCamera";
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" + startDir;
uri = Uri.parse(scheme);
intent.putExtra("android.provider.extra.INITIAL_URI", uri);
Log.d(TAG, "uri: " + uri.toString());
((Activity) context).startActivityForResult(intent, REQUEST_ACTION_OPEN_DOCUMENT_TREE);
return;
}
日志将打印如下内容:
INITIAL_URI scheme: content://com.android.externalstorage.documents/root/primary
uri: content://com.android.externalstorage.documents/document/primary%3ADownload
推荐阅读
- angular - 使用 Jasmine 弹珠运行测试时未执行 NGRX 效果
- python - Python 脚本发出多个 Web 请求以使用 threading.Timer 更新值
- r - 用线连接 ggplot2 图中的点
- java - 将 ListViews 添加到 LinearLayout 但仅显示第一次添加
- flutter - 找不到“Flutter/Flutter.h”文件 webview_flutter-1.0.7
- jira - 分离我们的 JIRA 看板
- reactjs - 在 React js 中渲染多个组件
- python - Crontab 没有在我的 Mac 上执行 Python 脚本?
- python - 如何编写一个算法来在 python 中查找 numpy 数组的特定值
- github-pages - 如何在 GitHub 公共存储库中隐藏 API 密钥?