ActivityResultContract 两次打开画廊

Posted

技术标签:

【中文标题】ActivityResultContract 两次打开画廊【英文标题】:ActivityResultContract opens gallery twice 【发布时间】:2021-09-16 08:28:06 【问题描述】:

按照 Google https://developer.android.com/training/basics/intents/result 的建议,我目前正在使用 ActivityResultContract(由于弃用)在 Android 应用 (java) 上切换 ActivityResults。 Example code

当我实现相同的示例代码从图库中获取图像时,如上面的链接所示,activityResult 不仅会打开默认图像选择器,还会要求我选择一个应用程序来选择图像: App opening image chooser and asking to choose an app

有没有办法避免要求应用选择图像?

【问题讨论】:

分享您的代码,这样我们也许可以提供帮助! 图片是除了指向developer.android之外的另外两个链接,activityResultContract的调用与示例代码中的相同。 欢迎@navi95!为了让社区更好地帮助您,请遵循***.com/help/how-to-ask 指南。 【参考方案1】:

您可以改用 ActivityResultLauncher。它将打开系统图库以从中选择图像。

只需按照以下步骤操作:-

    首先像这样创建 ActivityResultLauncher:

    ActivityResultLauncher<String> mGetContent = 
             registerForActivityResult(new GetContent(), new ActivityResultCallback<Uri>() 
     @Override
     public void onActivityResult(Uri uri) 
       // Handle the returned Uri
     
    );
    

    然后,在按钮单击或您需要时启动系统图像选择器。

    mGetContent.launch("image/*");
    

【讨论】:

以上是关于ActivityResultContract 两次打开画廊的主要内容,如果未能解决你的问题,请参考以下文章

Android Activity Results API-

Android Activity Results API-

Android ActivityResultContracts 替代 startActivityForResult

Android ActivityResultContracts 替代 startActivityForResult

如何在 Activity Result API 中设置请求代码?

Jetpack:使用 ActivityResult 处理 Activity 之间的数据通信