//这是我的画廊意图
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent,2);
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode == 2) {
Bitmap bm=null;
if (data != null) {
try {
bm = MediaStore.Images.Media.getBitmap(getApplicationContext().getContentResolver(), data.getData());
imageView.setImageBitmap(bm);
} catch (IOException e) {
e.printStackTrace();
}
}
Uri tempUri = getImageUri(getApplicationContext(), bm);
File finalFile = new File(getRealPathFromURI(tempUri));
} }
我正在我的android应用程序中实现相机和图库意图。当我捕获直通相机时,图像显示在imageview中,但是如果我尝试通过图库意图显示相同的相机图像,则图像不会显示。
注意:捕获的图像不是通过图库意图显示的,而其他文件夹图像则在imageview中显示
答案 0 :(得分:2)
错误#1:ACTION_PICK
不使用MIME类型。可以将ACTION_GET_CONTENT
与MIME类型一起使用,或者将ACTION_PICK
与集合Uri
(例如MediaStore.Images.Media.EXTERNAL_CONTENT_URI
)一起使用。
错误#2:您假设MediaStore
知道如何从该Uri
获取图像。由于Uri
可能不是来自MediaStore
,所以这是一个错误的假设。使用Glide或Picasso将图像加载到您的ImageView
中。
错误#3:您正在将图像加载到主应用程序线程上。这将在加载图像时冻结UI。使用Glide或Picasso将图像加载到您的ImageView
中,因为他们知道如何在后台线程上执行此操作。
错误#4:您似乎复制了一些代码“为位图获取Uri
”。您不需要这样做。您已经有Uri
的图像。它是data.getData()
,您曾用它来尝试首先加载图像。
错误#5:您似乎复制了一些代码,声称这些代码旨在获得“ Uri
的真实路径”。没有可靠的方法可以做到这一点。如果您希望File
包含图像中的数据,请使用ContentResolver
和openInputStream()
在InputStream
所标识的内容上获取Uri
,然后使用该InputStream
将字节复制到您控制的某个文件的FileOutputStream
中。
答案 1 :(得分:0)
尝试使用以下代码,希望对您有所帮助。
Uri selectedImage = data.getData();
Bitmap bitmap = null;
try {
bitmap = BitmapFactory.decodeStream(getActivity().getContentResolver().openInputStream(selectedImage));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
imageView.setImageBitmap(bitmap);