当前位置: 首页 > 知识库问答 >
问题:

AndroidACTION_IMAGE_CAPTURE意图在返回应用程序之前崩溃

濮君植
2023-03-14

我试图接收通过Mediastore拍摄的图像的URI。ACTION_IMAGE_CAPTURE意图,但由于某种原因,默认相机应用程序(谷歌)甚至在返回我的活动之前和我的代码到达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应用程序。另外,PID:26437 java。lang.IllegalArgumentException:必须通过Intent的数据字段指定源URI。准时。a(第185页)在com.google.Android应用程序。摄影编辑。碎片。多重性。Android上的onCreate(第93页)。应用程序。活动android上的performCreate(Activity.java:5933)。应用程序。仪器。android上的callActivityOnCreate(Instrumentation.java:1105)。应用程序。活动线程。在android上执行LaunchActivity(ActivityThread.java:2251)。应用程序。活动线程。android上的handleLaunchActivity(ActivityThread.java:2360)。应用程序。活动线程。在Android上获得800美元(ActivityThread.java:144)。应用程序。android上的ActivityThread$H.handleMessage(ActivityThread.java:1278)。操作系统。汉德勒。android上的dispatchMessage(Handler.java:102)。操作系统。活套。android上的loop(Looper.java:135)。应用程序。活动线程。java上的main(ActivityThread.java:5221)。朗,反思一下。方法在java上调用(本机方法)。朗,反思一下。方法在com上调用(Method.java:372)。Android内部的操作系统。ZygoteInit$MethodandArgscaler。在com上运行(zyteinit.java:899)。Android内部的操作系统。合子体。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);
      }
});

共有1个答案

巫马瀚漠
2023-03-14

试试这个:

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);
 类似资料:
  • 对于某些活动的意图是有效的,对于某些特定的活动意图是崩溃的,我已经改变并尝试了不同的方法,但是对于某些活动意图是无效的,应用程序正在构建,但是在手机上运行之后,它在调试期间没有显示出任何错误?我尝试了不同的方法,但它仍然崩溃,谁能帮助我解决它? MainActivity java 清单文件

  • 我有一个非常令人沮丧的问题。我正在使用Android摄像头启动摄像头并录制视频。 我期望的是:当我按stop时,我想通过onActivityResult返回我的应用程序活动,以执行一些操作,例如显示视频录制的拇指图像等。 发生的情况:当我按下stop时,屏幕会闪烁,好像回到应用程序,但随后会继续显示摄像头。我在ActivityResult中放了一个日志,它再也不会回这里了!请注意,这不是inten

  • objectName.java 主要问题是我无法转到“ageinput.java”文件, activity_ageinput.xml activity_ageinput.xml edit_text.xml 崩溃报告

  • 当用户按下注册按钮并将值传递给HomeActivity.java时,我试图从数据库(在LoginActivity.java上创建)传递变量。在我使用意图附加和捆绑之前,代码工作正常(除了传递变量)。但是当我把新代码,应用程序崩溃后,立即我按下注册按钮 我试图寻找另一个可能的重复问题,但没有一个问题与我的问题相同。他们中的大多数人忘了把活动放在android清单上,但我把LoginActivity放

  • 下面给出的错误 process:com.example.rahul.maptask,pid:21986 java.lang.runtimeException:无法启动活动ComponentInfo{com.example.rahul.maptask/com.example.rahul.maptask.mainactivity}:java.lang.nullpointerException:试图在A