Java Android操作\图像\捕获意图在返回应用程序之前崩溃

Java Android操作\图像\捕获意图在返回应用程序之前崩溃,java,android,Java,Android,我试图接收通过Mediastore.ACTION_image_CAPTURE intent拍摄的图像的URI,但由于某种原因,默认的摄像头应用程序(Google+)在返回到我的活动之前以及在我的代码到达onActivityResult()之前崩溃。我怀疑这与我设计意图的方式有关,但我不确定。这是我的密码: alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "New", new DialogInterface.OnClickListener()

我试图接收通过Mediastore.ACTION_image_CAPTURE intent拍摄的图像的URI,但由于某种原因,默认的摄像头应用程序(Google+)在返回到我的活动之前以及在我的代码到达onActivityResult()之前崩溃。我怀疑这与我设计意图的方式有关,但我不确定。这是我的密码:

alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "New", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            Intent takePictureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
        }
    });
如果有人要求,我也可以添加我的onActivityResult代码,尽管我不确定它在这里是否相关

以下是来自logcat的数据:

12-02 10:47:43.976 26437-26437/?E/AndroidRuntime﹕ 致命异常: 主要的 进程:com.google.android.apps.plus,PID:26437 java.lang.IllegalArgumentException:必须通过Intent的数据字段指定源URI。 在a点(第185页) 在com.google.android.apps.photoeditor.fragments.PlusCropActivity.onCreate(第93页) 位于android.app.Activity.performCreate(Activity.java:5933) 位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)上 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)上 在android.app.ActivityThread.access$800(ActivityThread.java:144) 在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 位于android.os.Handler.dispatchMessage(Handler.java:102) 位于android.os.Looper.loop(Looper.java:135) 位于android.app.ActivityThread.main(ActivityThread.java:5221) 位于java.lang.reflect.Method.invoke(本机方法) 位于java.lang.reflect.Method.invoke(Method.java:372) 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)上 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

这是因为我发起意向书的方式吗?有没有一种方法可以防止这种意图试图裁剪照片,因为我是以一种单独的意图来处理裁剪的

解决方案(我编辑了OferM提交的代码):

try
{
      tempFile = File.createTempFile("my_app", ".jpg");

      File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
      File image = File.createTempFile("my_app", ".jpg",storageDir);
      uri = Uri.fromFile(image);
}catch(Exception e){}

alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "New", new DialogInterface.OnClickListener() {
      @Override
      public void onClick(DialogInterface dialog, int which) {
          Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
          takePictureIntent.putExtras(getIntent().getExtras());
          takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
          startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
      }
});
试试这个:

alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "New", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            Intent takePictureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);

            startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
        }
    });
其中
uri
是您希望将图像存储在其中的本地路径。例如:

File tempFile = File.createTempFile("my_app", ".jpg");
fileName = tempFile.getAbsolutePath();
Uri uri = Uri.fromFile(tempFile);

如果能看到Logcat会有帮助。我刚才花了一些时间想知道在哪里可以找到Logcat问题,因为只过滤到我的应用程序并没有提供任何相关数据。我会随时更新帖子来详细说明这一点,你没有提供图片意图和存储相机图像的文件路径。这很好地描述了它:将此文件输入到intent中使图片intent不再崩溃,但是图片intent永远不会返回到我的应用程序。onActivityResult不会被调用,除非我通过后退按钮取消该意图。我还验证了进入intent的Uri不是空的。我将您的回复的编辑版本放在了原始帖子中。我必须添加一个目录才能让它工作。谢谢