首先,这不是经常发布的过早返回结果代码的问题。在这种情况下,只有在图库中选择项目后才会返回。
在我的测试用例中,我使用以下代码调用图库:
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)”上也发现了该错误。
请问,如何以适用于所有这些设备的方式从图库中获取图像路径?
当我在一项活动的清单中设置 launchMode="singleInstance" 时,我在该活动中遇到了同样的问题。当我删除该属性时它工作正常。
我认为,如果您没有在意图中指定返回结果代码,默认情况下图库不会返回结果代码。您可以通过在代码中添加此代码片段来指定返回结果代码,如下所示:
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);
嗨,史蒂夫,尝试一下,这似乎适用于我的壁纸项目
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"),SELECT_PICTURE);
如果使用
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
问题。