首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何通过ACTION_OPEN_DOCUMENT_TREE制作下载文件夹中的文件夹

如何通过ACTION_OPEN_DOCUMENT_TREE制作下载文件夹中的文件夹
EN

Stack Overflow用户
提问于 2022-06-14 05:24:18
回答 1查看 126关注 0票数 1

我正在用Java制作Android应用程序。我尽量不使用MANAGE_EXTERNAL_STORAGE将其上传到Google。(Google警告我不要使用它。)

打开应用程序时,我想在下载文件夹中创建"App“中的文件夹。

获得WRITE_EXTERNAL_PERMISSION和READ_EXTERNAL_PERMISSION后,我想显示下载文件夹和客户按下“保存”按钮创建"App“文件夹。(见附图)

我认为ACTION_OPEN_DOCUMENT_TREE是最好的方法,我的代码如下所示。

代码语言:javascript
运行
复制
//after getting permission
Integer NEW_FOLDER_REQUEST_CODE=810;

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(intent, NEW_FOLDER_REQUEST_CODE);


@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == Activity.RESULT_OK) { if (requestCode ==
                NEW_FOLDER_REQUEST_CODE)
        { if (data != null) {
            Uri currentUri = data.getData();
            DocumentFile pickedDir =
                    DocumentFile.fromTreeUri(this, currentUri);
            DocumentFile newDir =
                    pickedDir.createDirectory("App"); } } }
    }

我可以去内部存储,但不是Dowoload文件夹。

我该怎么走?

未显示新创建文件夹的名称输入字段(默认值: App)。

我该怎么展示呢?

EN

回答 1

Stack Overflow用户

发布于 2022-06-14 07:09:11

在得到许可后,

代码语言:javascript
运行
复制
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
                    StorageManager sm = (StorageManager) getApplicationContext().getSystemService(Context.STORAGE_SERVICE);
                    Intent intent = sm.getPrimaryStorageVolume().createOpenDocumentTreeIntent();
                    String startDir = "Documents";
                    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());
                    startActivityForResult(intent, NEW_FOLDER_REQUEST_CODE);
                    return;
                }

代码语言:javascript
运行
复制
@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == Activity.RESULT_OK) { if (requestCode ==
                NEW_FOLDER_REQUEST_CODE)
        { if (data != null) {
            Uri currentUri = data.getData();
            DocumentFile pickedDir =
                    DocumentFile.fromTreeUri(this, currentUri);
            DocumentFile newDir =
                    pickedDir.createDirectory("App"); } } }
    }

执行此代码时,将显示内部存储。

选择“下载”文件夹,然后单击“使用此文件夹”和“允许”。

然后在“下载”文件夹中创建“App”文件夹。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72611880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档