Android 种植活动';s在应用程序库中保存操作结果';s ANR
我编写了一个带有按钮的应用程序,用方法Android 种植活动';s在应用程序库中保存操作结果';s ANR,android,Android,我编写了一个带有按钮的应用程序,用方法startActivityForResult调用活动拍照。调用onActivityResult时,应用程序会转到裁剪活动来裁剪我刚才使用方法startActivityForResult拍摄的图像。但当我保存它时,gallery应用程序总是停止,返回应用程序未响应错误,这导致onActivityResult方法中的参数resultCode为0,即结果\u已取消 代码就是onCreate(),onActivityResult(),以及以下变量: public s
startActivityForResult
调用活动拍照。调用onActivityResult时,应用程序会转到裁剪活动来裁剪我刚才使用方法startActivityForResult
拍摄的图像。但当我保存它时,gallery应用程序总是停止,返回应用程序未响应错误,这导致onActivityResult
方法中的参数resultCode为0,即结果\u已取消
代码就是onCreate(),onActivityResult()
,以及以下变量:
public static final int TAKE_PHOTO = 1;
public static final int CROP_PHOTO = 2;
private Button takePhoto;
private ImageView picture;
private Uri imageUri;
onCreate():
onActivityResult():
相关日志:
06-28 10:30:35.750 1682-1694/?W/CameraCaptureSession﹕ 会话0:相机设备已关闭:
java.lang.IllegalStateException:CameraDevice已关闭
在android.hardware.camera2.impl.CameraDeviceImpl.checkifcameraclosedornError(CameraDeviceImpl.java:1482)
在android.hardware.camera2.impl.CameraDeviceImpl.stopRepeating(CameraDeviceImpl.java:677)
在android.hardware.camera2.impl.CameraCaptureSessionImpl.close(CameraCaptureSessionImpl.java:328)
在android.hardware.camera2.impl.CameraCaptureSessionImpl.finalize(CameraCaptureSessionImpl.java:561)
位于java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:191)
位于java.lang.Daemons$FinalizerDaemon.run(Daemons.java:174)
运行(Thread.java:818)
06-28 10:30:38.200 483-561/? 带音轨﹕ 音频\u输出\u标志\u快速被客户端拒绝
06-28 10:30:38.205 1589-1782/? D/skia﹕ --- SkImageDecoder::工厂返回null
06-28 10:30:38.205 1589-1782/? W/cropacitivity﹕ 无法打开文件的区域解码器:file:///storage/emulated/0/output_image.jpg
java.io.IOException:不支持图像格式
位于android.graphics.BitMapRegionCoder.NativenWinstance(本机方法)
位于android.graphics.BitMapRegionCoder.newInstance(BitMapRegionCoder.java:124)
在com.android.gallery3d.filtershow.crop.CropActivity$BitmapIOTask.doInBackground(CropActivity.java:483)
在com.android.gallery3d.filtershow.crop.CropActivity$BitmapIOTask.doInBackground(CropActivity.java:355)
在android.os.AsyncTask$2.call(AsyncTask.java:292)
位于java.util.concurrent.FutureTask.run(FutureTask.java:237)
在android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
运行(Thread.java:818)
06-28 10:30:38.206 1589-1782/? D/skia﹕ --- SkImageDecoder::工厂返回null
而且,有时这种情况不会发生,这对我来说是不可预测的。
但它总是导致权限拒绝导致FileNotFoundException
。
我添加了使用权限,包括读和写,而不是在应用程序标签中。这没用。我也有同样的问题,你找到解决办法了吗?@Sandra还没有。你?不,我没找到解决办法。最终,我使用了一个支持库来裁剪图像:。但我必须警告你们,当裁剪方向不同于0的图像时,这个库有一个bug,你们必须自己处理。可以在“问题”部分的讨论中找到解决方案。我不知道它是否会在库的下一个版本中实现,但我希望如此。除此之外,效果很好。谢谢你的提醒。
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
takePhoto = (Button) findViewById(R.id.take_photo);
picture = (ImageView) findViewById(R.id.picture);
takePhoto.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//init File object, to save the image
File outputImage = new File(Environment.getExternalStorageDirectory(), "output_image.jpg");
try{
if(outputImage.exists()){
outputImage.delete();
}
outputImage.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
imageUri = Uri.fromFile(outputImage);
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, TAKE_PHOTO);
}
});
switch (requestCode){
case TAKE_PHOTO:
if(resultCode == RESULT_OK){
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(imageUri, "image/*");
intent.putExtra("scale", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, CROP_PHOTO);
}
break;
case CROP_PHOTO:
Log.d("MainActivity", "CROP_PHOTO_IN, result code : " + resultCode);
if(resultCode == RESULT_OK){
Log.d("MainActivity", "CROP_PHOTO_OK");
try {
Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));
picture.setImageBitmap(bitmap);
Log.d("MainActivity", "PHOTO_SET");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
break;
default:
break;
}