我想在我手机的SD卡上选择一个文件夹。目前,我正在这样做:
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) {
}
}
});
。。
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
activityResultLauncher.launch(intent);
如何从活动中取回文件夹?如果我显示另一个活动--我如何才能分辨出哪个活动的结果是哪个?
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调用来完成这一任务。
发布于 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操作系统负责根据启动活动的启动程序调用正确的回调。
https://stackoverflow.com/questions/72246437
复制相似问题