首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用没有ACTION_OPEN_DOCUMENT_TREE的startActivityForResult?

如何使用没有ACTION_OPEN_DOCUMENT_TREE的startActivityForResult?
EN

Stack Overflow用户
提问于 2022-05-15 07:49:00
回答 1查看 129关注 0票数 0

我想在我手机的SD卡上选择一个文件夹。目前,我正在这样做:

代码语言:javascript
运行
复制
activityResultLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
        new ActivityResultCallback<ActivityResult>() {
    @Override
    public void onActivityResult(ActivityResult result) {
        Log.d(TAG, "Activity result!");
        if (result.getResultCode() == Activity.RESULT_OK) {
        }
    }
});

。。

代码语言:javascript
运行
复制
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
activityResultLauncher.launch(intent);

如何从活动中取回文件夹?如果我显示另一个活动--我如何才能分辨出哪个活动的结果是哪个?

代码语言:javascript
运行
复制
Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
intent.addCategory("android.intent.category.DEFAULT");
intent.setData(Uri.parse(String.format("package:%s", getApplicationContext().getPackageName())));
activityResultLauncher.launch(intent);

做事情的旧方法对我来说是有意义的(例如,带有请求代码和意图的see here ),但我不明白如何使用新的API调用来完成这一任务。

EN

回答 1

Stack Overflow用户

发布于 2022-11-28 20:34:02

我认为你们的困惑是因为使用了错误的合同。ActivityResultContracts.StartActivityForResult更适合您有自己的活动,并且希望启动它并以自定义的方式处理结果的情况。在这种情况下,您将在Intent中返回结果,然后使用activityResult.getData()获取该Intent并对其进行处理。

对于ACTION_OPEN_DOCUMENT_TREE来说,没有必要这样做(我也不知道Android会返回什么样的格式,可能没有文档记录),您可以只使用ActivityResultContracts.OpenDocumentTree

如何从活动中取回文件夹?

切换到使用ActivityResultContracts.OpenDocumentTree将允许您定义一个ActivityResultCallback<Uri>而不是ActivityResultCallback<ActivityResult>。然后,您可以像往常一样处理接收到的Uri

,如果我显示另一个活动怎么办?我如何知道哪一个活动结果是哪个?

如果您要启动另一个活动,您将使用一个不同的ActivityResultLauncher (在这种情况下,必须单独调用registerForActivityResult,并使用它自己的相关回调)。Android操作系统负责根据启动活动的启动程序调用正确的回调。

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

https://stackoverflow.com/questions/72246437

复制
相关文章

相似问题

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