Android Gallery 总是向 onActivityResult 返回 RESULT_CANCELED

问题描述 投票:0回答:4

首先,这不是经常发布的过早返回结果代码的问题。在这种情况下,只有在图库中选择项目后才会返回。

在我的测试用例中,我使用以下代码调用图库:

Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent,  SELECT_PICTURE);

在onActivityResult中有:

if (resultCode == Activity.RESULT_OK) {
    if (requestCode == SELECT_PICTURE) {
        Uri selectedImageUri = data.getData();
        pathText.setText(selectedImageUri.getPath());
    }
} else {
    pathText.setText("Result not OK - code is " + resultCode);
}

pathText 只是我放入的一个 TextView,用于在测试用例中显示结果。在实际应用中,路径有不同的用途。

如果我使用 ACTION_PICK 而不是 _GET_CONTENT,我会立即收到其他人报告的失败消息。清单中没有 launchMode 标签(一些帖子提出了该区域的问题)。

也许这里有线索。在 Toshiba Thrive 上,使用图库、文件管理器或 Fish Bowl Photo Gallery 不会出现此错误。在 Kindle Fire 上,Quickoffice 还能够正确返回图像路径。该错误仅出现在 Kindle 的内置图库中。在“Motorola Droid(2.3.4)、HTC EVO (2.3)”上也发现了该错误。

请问,如何以适用于所有这些设备的方式从图库中获取图像路径?

android image android-intent gallery
4个回答
6
投票

当我在一项活动的清单中设置 launchMode="singleInstance" 时,我在该活动中遇到了同样的问题。当我删除该属性时它工作正常。


2
投票

我认为,如果您没有在意图中指定返回结果代码,默认情况下图库不会返回结果代码。您可以通过在代码中添加此代码片段来指定返回结果代码,如下所示:

Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.putExtra("return-data", true); //added snippet
startActivityForResult(Intent.createChooser(intent, "Select Picture"),SELECT_PICTURE);

0
投票

嗨,史蒂夫,尝试一下,这似乎适用于我的壁纸项目

Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent, "Select Picture"),SELECT_PICTURE);  

0
投票

如果使用

registerForActivityResult
,您可以简单地执行以下操作:

val galleryLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()){result->
   if(result.resultCode == Activity.RESULT_OK){
    // Handle result here
   }
}
val galleryIntent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
galleryLauncher.launch(Intent.createChooser(galleryIntent, null)

如果直接通过

galleryIntent
而没有
Intent.createChooser
,我将面临
RESULT_CANCELED
问题。

© www.soinside.com 2019 - 2024. All rights reserved.