在我的应用程序中,我希望用户从库中选择一个图像并检索结果(缩略图+完整图像uri)。我还希望用户能够选择要打开的图库应用(即默认图库应用或其他图库应用)。
最初,根据谷歌的guide我复制并粘贴了这段代码:
public void selectImage() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
if (intent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(intent, REQUEST_IMAGE_GET);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_IMAGE_GET && resultCode == RESULT_OK) {
Bitmap thumbnail = data.getParcelable("data");
Uri fullPhotoUri = data.getData();
// Do work with photo saved at fullPhotoUri
...
}
}
虽然它确实让我获得了onActivityResult(...)
中的缩略图和完整的Uri,但问题是它没有为用户打开选择器来选择要使用的图库应用程序,而是打开这个东西(参见图像)下面),我假设是一个默认的“图像选择器”的东西,你可以通过菜单选择另一个应用程序。
我觉得用户必须首先打开这个默认的“图像选择器”并且一旦他们已经处于“图像选择器”中,这是愚蠢的,选择他们实际想要使用的图库应用程序(当然,用户可能只是选择这个东西的图像,但我想给他们一个方便的选择)。
所以我把我的代码更改为了这个,它确实为用户显示了一个合适的选择器,他可以直接找到他最喜欢的画廊应用程序:
Intent intent = new Intent(Intent.ACTION_PICK,
MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
intent.setType("image/*");
if (intent.resolveActivity(getActivity().getPackageManager()) != null)
{
startActivityForResult(intent, Utils.REQUEST_CODE_OPEN_GALLERY);
}
但是现在我遇到了一个新问题:在onActivityResult(...)
中,行data.getParcelable("data");
返回null。换句话说,我没有拿回缩略图。
我也试过
Bundle extras = data.getExtras();
Bitmap thumbnail = (Bitmap) extras.get("data");
但“extras”为空。
是否有可能拥有一个合适的“app chooser” AND 取回缩略图?
答案 0 :(得分:0)
然而现在我遇到了一个新问题:在onActivityResult(...)中行data.getParcelable(" data");返回null。换句话说,我没有拿回缩略图。
你也没有从ACTION_GET_CONTENT
得到这个。你可以通过阅读the documentation for ACTION_GET_CONTENT
来说明这一点。当然可能会发生一些错误的ACTION_GET_CONTENT
活动,这些活动恰好会在Bitmap
额外的内容中返回缩略图"data"
,但您不应该假设任何用户都会遇到这样的错误ACTION_GET_CONTENT
1}}活动,更不用说选择它了。此外,ACTION_GET_CONTENT
不仅限于图像;什么是"缩略图"是application/json
还是text/csv
?
同样,如果您阅读the documentation for ACTION_PICK
,您会发现没有关于缩略图的讨论。
是否可以拥有一个合适的应用选择器"并取回缩略图?
不,只要您没有从ACTION_IMAGE_CAPTURE
以外的任何内容获取缩略图,那就是拍照。