首页 > 解决方案 > 调用 dispatchTakePictureIntent 时应用程序崩溃

问题描述

当我单击以下按钮使用时,我的应用程序崩溃了dispatchTakePictureIntent

我的代码:

    ic_img_item.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

                dispatchTakePictureIntent(PHOTO);

        }
    });



private void dispatchTakePictureIntent(int requestCode) {
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (takePictureIntent.resolveActivity(activity.getPackageManager()) != null) {
        takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, PHOTO_TEMP);
        takePictureIntent.putExtra("return-data", true);
        startActivityForResult(takePictureIntent, requestCode);
    }
}


@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {

       if (resultCode == Activity.RESULT_OK) {
           try {
               BitmapFactory.Options bmOptions = new BitmapFactory.Options();
               bmOptions.inSampleSize = 2;
               Bitmap bitmap = RotateBitmap(BitmapFactory.decodeStream(activity.getContentResolver().openInputStream(PHOTO_TEMP), null, bmOptions), getPictureOrientation(PHOTO_TEMP));
               thumb = getThumbnail(bitmap);
               setThumbnail(bitmap);

           } catch (FileNotFoundException e) {
               e.printStackTrace();
           }
       }
}

日志:

    --------- beginning of crash
2020-09-10 17:41:31.769 25093-25093/ubisolutions.net.datacenterinventory.debug E/AndroidRuntime: FATAL EXCEPTION: main
    Process: ubisolutions.net.datacenterinventory.debug, PID: 25093
    java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 3087012 bytes
        at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3782)
        at android.os.Handler.handleCallback(Handler.java:751)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6123)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)
     Caused by: android.os.TransactionTooLargeException: data parcel size 3087012 bytes
        at android.os.BinderProxy.transactNative(Native Method)
        at android.os.BinderProxy.transact(Binder.java:615)
        at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:3653)
        at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3774)
        at android.os.Handler.handleCallback(Handler.java:751) 
        at android.os.Handler.dispatchMessage(Handler.java:95) 
        at android.os.Looper.loop(Looper.java:154) 
        at android.app.ActivityThread.main(ActivityThread.java:6123) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779) 
2020-09-10 17:41:31.775 1239-1239/? E/NotificationService: Suppressing notification from package by user request.
2020-09-10 17:41:31.775 1239-25274/? I/QCALOG: [MessageQ_Client] connecting to server [/data/misc/location/mq/location-mq-s]
2020-09-10 17:41:31.776 1239-25274/? E/QCALOG: [MessageQ_Client] connect error: 111, [Connection refused]

我看到了一些关于类似问题的回复,但没有一个可以帮助我解决它。谢谢。

标签: javaandroidandroid-cameraruntimeexception

解决方案


你的代码行

takePictureIntent.putExtra("return-data", true);

请求,直接返回图片数据,但结果太大无法传回。相反,您应该从 PHOTO_TMP 获取它,您也传递了意图。

takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, PHOTO_TEMP)

推荐阅读