Android BitmapFactory.decode()从库中拾取图像后出现找不到生成文件错误
解码从媒体接收到的图像文件。在操作中的额外输出拾取未找到意图生成文件异常。我看到了很多类似的问题,但仍然无法解决这个问题。我在androidGallery应用程序下面的棒棒糖中遇到了这个问题,在android版本=5上面的谷歌照片应用程序中也遇到了同样的问题 Myfragment.javaAndroid BitmapFactory.decode()从库中拾取图像后出现找不到生成文件错误,android,android-camera,android-bitmap,Android,Android Camera,Android Bitmap,解码从媒体接收到的图像文件。在操作中的额外输出拾取未找到意图生成文件异常。我看到了很多类似的问题,但仍然无法解决这个问题。我在androidGallery应用程序下面的棒棒糖中遇到了这个问题,在android版本=5上面的谷歌照片应用程序中也遇到了同样的问题 Myfragment.java if (takePictureIntent.resolveActivity(mContext.getPackageManager()) != null) { takePictureIntent.put
if (takePictureIntent.resolveActivity(mContext.getPackageManager()) != null) {
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,Helpers.getOutputMediaFileUri());
Intent startImage = Intent.createChooser(chooseImageIntent, "Select From");
startImage.putExtra(Intent.EXTRA_INITIAL_INTENTS,
new Intent[]{takePictureIntent});
((Activity) mContext).startActivityForResult(startImage, Constants.REQUEST_CHOOSE_FROM);
} else {
((Activity) mContext).startActivityForResult(chooseImageIntent, Constants.REQUEST_IMAGE_GALLERY);
}
public static String LAST_IMAGE_FILE;
public static final String TEMP_IMAGE_FILE = "TEMP_IMG";
public static File getOutputMediaFile() {
File mediaStorageDir = new File(
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
"In.Touch");
if (!mediaStorageDir.exists()) {
if (!mediaStorageDir.mkdirs()) {
return null;
}
}
// Create a media file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss",
Locale.getDefault()).format(new Date());
File mediaFile = new File(mediaStorageDir.getPath() + File.separator
+ TEMP_IMAGE_FILE + "_" + timeStamp + ".jpg");
LAST_IMAGE_FILE = mediaFile.getAbsolutePath();
return mediaFile;
}
Helpers.java
if (takePictureIntent.resolveActivity(mContext.getPackageManager()) != null) {
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,Helpers.getOutputMediaFileUri());
Intent startImage = Intent.createChooser(chooseImageIntent, "Select From");
startImage.putExtra(Intent.EXTRA_INITIAL_INTENTS,
new Intent[]{takePictureIntent});
((Activity) mContext).startActivityForResult(startImage, Constants.REQUEST_CHOOSE_FROM);
} else {
((Activity) mContext).startActivityForResult(chooseImageIntent, Constants.REQUEST_IMAGE_GALLERY);
}
public static String LAST_IMAGE_FILE;
public static final String TEMP_IMAGE_FILE = "TEMP_IMG";
public static File getOutputMediaFile() {
File mediaStorageDir = new File(
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
"In.Touch");
if (!mediaStorageDir.exists()) {
if (!mediaStorageDir.mkdirs()) {
return null;
}
}
// Create a media file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss",
Locale.getDefault()).format(new Date());
File mediaFile = new File(mediaStorageDir.getPath() + File.separator
+ TEMP_IMAGE_FILE + "_" + timeStamp + ".jpg");
LAST_IMAGE_FILE = mediaFile.getAbsolutePath();
return mediaFile;
}
OnActivityResult
File file = new File(Helpers.LAST_IMAGE_FILE);
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inJustDecodeBounds = true;
Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath(), opts);
AndroidManifest.xml
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
请在保存的实例状态
Bundle
或进程终止后仍能保存的其他文件中,显示保存最后一个图像\u文件的值的代码。另外,请注意,ACTION\u PICK
不使用EXTRA\u输出
——而是使用Uri
返回onActivityResult()
,使用ContentResolver、
open()和
BitmapFactory.decodeStream()`(或者更好的是像毕加索一样)。我已经更新了我的代码。最后一个图像文件是Helpers.java中的静态变量,也是临时图像文件