如何在android 4.4中解决错误:“!!! FAILED BINDER TRANSACTION !!!”

时间:2014-05-01 12:37:38

标签: android

我使用自定义相机应用程序然后我打开这个应用程序工作正常,但我打开相机视图,并拍照得到错误在Android 4.4版本中失败的活页夹交易,但当我检查以下所有版本4.4以下工作正常。为什么android 4.4版本有问题?

我的相机活动如下:

public class CameraActivity extends Activity {

    Camera mCamera;
    CameraPreview mCameraPreview;
    protected static final int MEDIA_TYPE_IMAGE = 0;
    static String FilePAth = "";
    Button takePicture , btnGlr , btnCancelCamera;
    static String base64string = "";
    String ImageType;

    final int RESULT_LOAD_IMAGE = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.camera_preview);

        mCamera = getCameraInstance();

        mCameraPreview = new CameraPreview(CameraActivity.this, mCamera);
        FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
        preview.addView(mCameraPreview);

        takePicture = (Button) findViewById(R.id.btnTakePicture);
        takePicture.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                mCamera.takePicture(null, null, mPicture);
            }
        });

        Intent intent = getIntent();

        if (intent.hasExtra("ImageType")) {
            ImageType = getIntent().getStringExtra("ImageType").toString();

            Log.v("log", " ImageType in Camera Activity -- >  " + ImageType);
        }

        btnGlr = (Button)findViewById(R.id.btnGallary);
        btnGlr.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                Intent i = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                startActivityForResult(i, RESULT_LOAD_IMAGE );

            }
        });

        btnCancelCamera = (Button)findViewById(R.id.btnCancelCamera);
        btnCancelCamera.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                Intent intent = new Intent(getApplication(), MarketPlaceActivity.class);
                startActivity(intent);
            }
        });

    }

    @Override
    public void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        releaseCamera();
    }

    private void releaseCamera() {
        if (mCamera != null) {
            mCamera.release(); // release the camera for other applications
            mCamera = null;
        }
    }

    private Camera getCameraInstance() {

        try {
            Log.v("log_tag", "camera try:::" + mCamera);
            mCamera = Camera.open();

        } catch (Exception e) {
            // cannot get camera or does not exist
            Log.v("log_tag", "camera catch:::" + mCamera);
            releaseCamera();
        }
        return mCamera;
    }



     PictureCallback mPicture = new PictureCallback() {
        @Override
        public void onPictureTaken(byte[] data, Camera camera) {

            if (ImageType.equals("AddPicture")) {
                Intent i = new Intent(CameraActivity.this,MarketPlaceActivity.class);
                i.putExtra("data", data);
                startActivity(i);
            } else {
                Intent returnIntent = new Intent();
                returnIntent.putExtra("data", data);
                setResult(RESULT_OK, returnIntent);
                CameraActivity.this.finish();
            }
        }
    };




    public void onBackPressed() {
        Intent returnIntent = new Intent();
        returnIntent.putExtra("path", FilePAth);
        setResult(RESULT_OK, returnIntent);
        finish();
    };

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
            Uri selectedImage = data.getData();
            String[] filePathColumn = { MediaStore.Images.Media.DATA };
            Cursor cursor = getContentResolver().query(selectedImage,filePathColumn, null, null, null);
            cursor.moveToFirst();
            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            String picturePath = cursor.getString(columnIndex);
            Log.v("log"," picturePath --> selected Gallary Image path --> " + picturePath);
            cursor.close();

            InputStream iStream;
            byte[] inputData = null;

            try {
                iStream = getContentResolver().openInputStream(selectedImage);
                inputData = getBytes(iStream);

                Log.v("log"," selected Gallary Image ByteArray --> " + inputData);

            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            if (ImageType.equals("AddPicture")) {
                Intent i = new Intent(getBaseContext(),MarketPlaceActivity.class);
                i.putExtra("data", inputData);
                i.putExtra("image_from", "Gallary");
                startActivity(i);
            } else {
                Intent returnIntent = new Intent();
                returnIntent.putExtra("data", inputData);
                returnIntent.putExtra("image_from", "Gallary");
                setResult(RESULT_OK, returnIntent);
                CameraActivity.this.finish();
            }

            //    ImageView imageView = (ImageView) findViewById(R.id.imgView);
            //    imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));
        }
    }

    public byte[] getBytes(InputStream inputStream) throws IOException {
          ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();
          int bufferSize = 1024;
          byte[] buffer = new byte[bufferSize];

          int len = 0;
          while ((len = inputStream.read(buffer)) != -1) {
            byteBuffer.write(buffer, 0, len);
          }
          return byteBuffer.toByteArray();
        }

}

和相机预览下方::

public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
    private SurfaceHolder mSurfaceHolder;
    private Camera mCamera;
     Boolean isPreviewRunning = true; 


    // Constructor that obtains context and camera
     public CameraPreview(Context context, Camera camera) {
            super(context);
            mCamera = camera;

            // Install a SurfaceHolder.Callback so we get notified when the
            // underlying surface is created and destroyed.
            mSurfaceHolder = getHolder();
            mSurfaceHolder.addCallback(this);
            // deprecated setting, but required on Android versions prior to 3.0
            mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        }

    @Override
    public void surfaceCreated(SurfaceHolder surfaceHolder) {
        try {
            mCamera.setPreviewDisplay(surfaceHolder);
            mCamera.startPreview();
            //mCamera.setDisplayOrientation(90);
        } catch (IOException e) {
            // left blank for now
        }
    }

    /*@Override
    public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
        //mCamera.stopPreview();
    //  mCamera.release();
         if (mCamera != null)
            {
                mCamera.stopPreview();
                mCamera.release();
            }
    }*/


      @Override
        public void surfaceDestroyed(SurfaceHolder surfaceHolder) {     

            this.getHolder().removeCallback(this);
            if (mCamera != null)
            {
                mCamera.stopPreview();
                mCamera.release();
            }
        }
    /*@Override
    public void surfaceChanged(SurfaceHolder surfaceHolder, int format,
            int width, int height) {
        // start preview with new settings

        try {
            mCamera.stopPreview();
            mCamera.setPreviewDisplay(surfaceHolder);
            mCamera.startPreview();
            //mCamera.setDisplayOrientation(90);
        } catch (Exception e) {
            // intentionally left blank for a test
        }
    }*/

      public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
            // If your preview can change or rotate, take care of those events here.
            // Make sure to stop the preview before resizing or reformatting it.

            if (mSurfaceHolder.getSurface() == null){
              // preview surface does not exist
              return;
            }

            // stop preview before making changes
            if(isPreviewRunning)
            {
              mCamera.stopPreview();
            }

            Parameters parameters = mCamera.getParameters();

            WindowManager windo =  (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);
            Display display = windo.getDefaultDisplay();

            if(display.getRotation() == Surface.ROTATION_0)
            {
                parameters.setPreviewSize(h,w);          
                mCamera.setDisplayOrientation(90);

            }

            if(display.getRotation() == Surface.ROTATION_90)
            {
                parameters.setPreviewSize(w, h);            

            }

            if(display.getRotation() == Surface.ROTATION_180)
            {
                parameters.setPreviewSize(h, w);  
             //   mCamera.setDisplayOrientation(270);

            }

            if(display.getRotation() == Surface.ROTATION_270)
            {
                parameters.setPreviewSize(w, h);
                mCamera.setDisplayOrientation(180);

            }
            // set preview size and make any resize, rotate or
            // reformatting changes here

            // start preview with new settings

//          mCamera.setParameters(parameters);
            try {
                mCamera.setPreviewDisplay(mSurfaceHolder);
                mCamera.startPreview();
                isPreviewRunning = true;

            } catch (Exception e){
                Log.d("log", "Error starting camera preview: " + e.getMessage());
            }
        }

      @Override
        protected void onMeasure(int widthSpec, int heightSpec) {
            int previewWidth = MeasureSpec.getSize(widthSpec);
            int previewHeight = MeasureSpec.getSize(heightSpec);

            //Get the padding of the border background
            int hPadding = getPaddingLeft() + getPaddingRight();
            int vPadding = getPaddingTop() + getPaddingBottom();

            //Resize the preview frame with correct aspect ratio
            previewWidth += hPadding;
            previewHeight -= vPadding;

            //Add the padding of the border.
            previewWidth += hPadding;
            previewHeight += vPadding;

            //Ask children to follow the new preview dimension
            super.onMeasure(MeasureSpec.makeMeasureSpec(previewWidth, MeasureSpec.EXACTLY),
                    MeasureSpec.makeMeasureSpec(previewHeight, MeasureSpec.EXACTLY));
        }
}

我在图片视图中的个人资料照片中设置了我的代码,位于下面的::

public class ProfileFragment extends Fragment{

    EditText edtFname ,edtLname ,edtEmailID ,edtPassword;
    private String userId;
    MyApplication app;
    ImageView imgUser; 
    String base64st;
    byte[] byteArrayimage;
    CircularImageView imguser1;

     ProgressDialog progress;
    Bitmap resizedBitmap;
    private View rootView;
    Bitmap bmp;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        rootView = inflater.inflate(R.layout.profile, container, false);
        app = (MyApplication) getActivity().getApplicationContext();
        edtFname = (EditText)rootView.findViewById(R.id.edtProfileFirstname);
        edtLname = (EditText)rootView.findViewById(R.id.edtProfileLastname);
        edtEmailID = (EditText)rootView.findViewById(R.id.edtProfileEmail);
        edtPassword = (EditText)rootView.findViewById(R.id.edtProfilePAssword);

        if (android.os.Build.VERSION.SDK_INT > 9) {
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
                    .permitAll().build();
            StrictMode.setThreadPolicy(policy);
        }

        progress = new ProgressDialog(getActivity());
        progress.setMessage("Loading...");

        new JSONTask().execute();

        TextView btnTakeUserPhoto = (TextView)rootView.findViewById(R.id.txt_change_profile);

        btnTakeUserPhoto.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                Intent cameraAct = new Intent(getActivity(),CameraActivity.class);
                cameraAct.putExtra("ImageType", "ProfilePicture");
                startActivityForResult(cameraAct, 1);               
            }
        });

        Button btnUpdateProfile = (Button)rootView.findViewById(R.id.btn_update_profile);


        Typeface tf = Typeface.createFromAsset(getActivity().getAssets(),
                "fonts/ITCAvantGardeStd-BkCn.otf");
        edtFname.setTypeface(tf);
        edtLname.setTypeface(tf);
        edtEmailID.setTypeface(tf);
        edtPassword.setTypeface(tf);
        btnTakeUserPhoto.setTypeface(tf);
        btnUpdateProfile.setTypeface(tf);

        btnUpdateProfile.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                String strFname = edtFname.getText().toString();
                String strLname = edtLname.getText().toString();
                String strEmail = edtEmailID.getText().toString();
                String strPassword = edtPassword.getText().toString();

                Log.v("log", " strPassword "  +  strPassword);

                ArrayList<UserInfo_dto>  result_list =  DBAdpter.updateUserInfo(userId,strFname,strLname,strEmail,strPassword,base64st);


                if(result_list.get(0).getMsg().equals("User information successfully updated"))
                {
                    Toast.makeText(getActivity(), result_list.get(0).getMsg() , 1).show();

                    String message = DBAdpter.updateUserImage(userId,base64st);

                    Log.v("log"," message -->  "+ message);

                    FragmentManager fm = getFragmentManager();
                    FragmentTransaction fragmentTransaction = fm
                            .beginTransaction();
                    HomeFragment fm2 = new HomeFragment();
                    fragmentTransaction.replace(R.id.relProfileFraLayout,fm2, "HELLO");
                    fragmentTransaction.addToBackStack(null);
                    fragmentTransaction.commit();

                }
            }
        });

        return rootView;
    }

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

        if (requestCode == 1) {
            Log.v("log"," OnActivity  Result");
            if (data.hasExtra("data")) {

                BitmapFactory.Options options = new BitmapFactory.Options();
                options.inPurgeable = true; // inPurgeable is used to free up
                                            // memory while required

                Bitmap b = BitmapFactory.decodeByteArray(
                        data.getByteArrayExtra("data"), 0,
                        data.getByteArrayExtra("data").length, options);

                int width = b.getWidth();
                int height = b.getHeight();
                int newWidth = 100;
                int newHeight = 80;
                float scaleWidth = ((float) newWidth) / width;

                float scaleHeight = ((float) newHeight) / height;

                Matrix matrix = new Matrix();
                matrix.postScale(scaleWidth, scaleHeight);

                if (data.hasExtra("image_from")) {
                    resizedBitmap = Bitmap.createBitmap(b, 0, 0, width, height,
                            matrix, true);

                    ByteArrayOutputStream stream = new ByteArrayOutputStream();
                    resizedBitmap.compress(Bitmap.CompressFormat.PNG, 0, stream);
                    byteArrayimage = stream.toByteArray();

                }
                else
                {
                int rotation = getActivity().getWindowManager()
                        .getDefaultDisplay().getRotation();

                int finalDegree = 0;

                if (rotation == 0) {

                    finalDegree = 90;

                }

                if (rotation == 1) {

                    finalDegree = 270;

                }

                if (rotation == 2) {

                    finalDegree = 180;

                }

                if (rotation == 3) {

                    finalDegree = 90;

                }

                matrix.postRotate(finalDegree);

                resizedBitmap = Bitmap.createBitmap(b, 0, 0, width,
                        height, matrix, true);
                ByteArrayOutputStream stream = new ByteArrayOutputStream();
                resizedBitmap.compress(Bitmap.CompressFormat.PNG, 0, stream);
                byteArrayimage = stream.toByteArray();
            }
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {

                    imguser1.setImageBitmap(resizedBitmap);
                    imguser1.setScaleType(ScaleType.CENTER);
                    imguser1.setBorderColor(getResources().getColor(R.color.GrayLight));
                    imguser1.setBorderWidth(0);
                    MarketPlaceActivity.imView.setImageBitmap(resizedBitmap);
                    MarketPlaceActivity.imView.setScaleType(ScaleType.CENTER);

                } else {
                    imgUser.setImageBitmap(resizedBitmap);
                    imgUser.setScaleType(ScaleType.CENTER);
                    MarketPlaceActivity.imView1.setImageBitmap(resizedBitmap);
                    MarketPlaceActivity.imView1.setScaleType(ScaleType.CENTER);
                }

                base64st = Base64.encodeBytes(byteArrayimage);
            }
        }
    }

    public class JSONTask extends AsyncTask<String, Void, String> {

        public void onPreExecute() {
            progress.show();
        }

        @Override
        protected String doInBackground(String... arg) {
            String listSize = "";

            String FirstNAme = DBAdpter.fetch_UserDetail_data.get(0).getFirst_name(); 
            userId = app.getUserID();
            String lastName = DBAdpter.fetch_UserDetail_data.get(0).getLast_name();
            String emailId = DBAdpter.fetch_UserDetail_data.get(0).getEmail();
            String Mobile = DBAdpter.fetch_UserDetail_data.get(0).getMobile();

            Log.v("log", "userId" + userId + " FirstNAme : " + FirstNAme + " LAstName " + lastName + " emailId " + emailId + "Mobile " + Mobile);

            edtFname.setText(FirstNAme);
            edtLname.setText(lastName);
            edtEmailID.setText(emailId);
            edtPassword.setText("");

            String img_url = DBAdpter.fetch_UserDetail_data.get(0).getStrore_profile_image().toString().trim();
            bmp = getBitmapFromUrl(img_url);

            return listSize; // This value will be returned to your
                                // onPostExecute(result) method
        }

        @Override
        protected void onPostExecute(String result) {
            // Create here your JSONObject...
            Log.v("log_tag", "list ON Post");
            progress.dismiss();

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
                Log.v("log", " Above HoneyComb ");

                imguser1 = (CircularImageView) rootView.findViewById(R.id.img_user_image);
                        imguser1.setImageBitmap(bmp);
                imguser1.setBorderColor(getResources().getColor(R.color.GrayLight));
                imguser1.setBorderWidth(0);


                final BitmapDrawable bitmapDrawable = (BitmapDrawable) imguser1
                        .getDrawable();
                final Bitmap yourBitmap = bitmapDrawable.getBitmap();

                ByteArrayOutputStream stream = new ByteArrayOutputStream();
                yourBitmap.compress(Bitmap.CompressFormat.PNG, 0, stream);
                byte[] byteArray = stream.toByteArray();
                base64st = Base64.encodeBytes(byteArray);
                Log.v("log_tag", "base64st" + base64st);


            } else {
                Log.v("log", " Below HoneyComb ");

                imgUser = (ImageView)rootView.findViewById(R.id.img_user_image);
                imgUser.setImageBitmap(bmp);
                final BitmapDrawable bitmapDrawable = (BitmapDrawable) imgUser
                        .getDrawable();
                final Bitmap yourBitmap = bitmapDrawable.getBitmap();

                ByteArrayOutputStream stream = new ByteArrayOutputStream();
                yourBitmap.compress(Bitmap.CompressFormat.PNG, 0, stream);
                byte[] byteArray = stream.toByteArray();
                base64st = Base64.encodeBytes(byteArray);
                Log.v("log_tag", "base64st" + base64st);
            }


        }

        // You'll have to override this method on your other tasks that extend
        // from this one and use your JSONObject as needed

    }

    public Bitmap getBitmapFromUrl(String urlStore) {
        URL url = null;
        try {
            url = new URL(urlStore);
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Bitmap bmp = null;
        try {
            bmp = BitmapFactory.decodeStream(url.openConnection()
                    .getInputStream());
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return bmp;
    }

}

我测试Android 4.4版本然后在这里得到错误::

04-30 10:34:39.303: V/log(32387):  onMenuItemClick Selected Item ===> Add Picture
04-30 10:34:39.353: V/log(32387): current state is visible
04-30 10:34:39.414: D/AbsListView(32387): unregisterIRListener() is called 
04-30 10:34:39.414: D/AbsListView(32387): unregisterIRListener() is called 
04-30 10:34:39.414: D/AbsListView(32387): unregisterIRListener() is called 
04-30 10:34:39.424: W/ApplicationPackageManager(32387): getCSCPackageItemText()
04-30 10:34:39.444: V/log_tag(32387): camera try:::null
04-30 10:34:39.744: V/log(32387):  ImageType in Camera Activity -- >  AddPicture
04-30 10:34:41.065: V/log(32387): hiding menu
04-30 10:34:41.065: I/Choreographer(32387): Skipped 78 frames!  The application may be doing too much work on its main thread.
04-30 10:34:41.295: D/AbsListView(32387): onVisibilityChanged() is called, visibility : 4
04-30 10:34:41.295: D/AbsListView(32387): unregisterIRListener() is called 
04-30 10:34:41.295: D/AbsListView(32387): onVisibilityChanged() is called, visibility : 4
04-30 10:34:41.295: D/AbsListView(32387): unregisterIRListener() is called 
04-30 10:34:41.295: D/AbsListView(32387): onVisibilityChanged() is called, visibility : 4
04-30 10:34:41.295: D/AbsListView(32387): unregisterIRListener() is called 
04-30 10:34:53.207: D/dalvikvm(32387): GC_FOR_ALLOC freed 484K, 6% free 37240K/39444K, paused 32ms, total 32ms
04-30 10:34:53.247: E/JavaBinder(32387): !!! FAILED BINDER TRANSACTION !!!
04-30 10:35:20.444: D/AndroidRuntime(32387): Shutting down VM
04-30 10:35:20.444: W/dalvikvm(32387): threadid=1: thread exiting with uncaught exception (group=0x4192eda0)
04-30 10:35:20.454: E/AndroidRuntime(32387): FATAL EXCEPTION: main
04-30 10:35:20.454: E/AndroidRuntime(32387): Process: com.buymysari, PID: 32387
04-30 10:35:20.454: E/AndroidRuntime(32387): java.lang.RuntimeException: takePicture failed
04-30 10:35:20.454: E/AndroidRuntime(32387):    at android.hardware.Camera.native_takePicture(Native Method)
04-30 10:35:20.454: E/AndroidRuntime(32387):    at android.hardware.Camera.takePicture(Camera.java:1338)
04-30 10:35:20.454: E/AndroidRuntime(32387):    at android.hardware.Camera.takePicture(Camera.java:1283)
04-30 10:35:20.454: E/AndroidRuntime(32387):    at com.buymysari.CameraActivity$2.onClick(CameraActivity.java:58)
04-30 10:35:20.454: E/AndroidRuntime(32387):    at android.view.View.performClick(View.java:4633)
04-30 10:35:20.454: E/AndroidRuntime(32387):    at android.view.View$PerformClick.run(View.java:19330)
04-30 10:35:20.454: E/AndroidRuntime(32387):    at android.os.Handler.handleCallback(Handler.java:733)
04-30 10:35:20.454: E/AndroidRuntime(32387):    at android.os.Handler.dispatchMessage(Handler.java:95)
04-30 10:35:20.454: E/AndroidRuntime(32387):    at android.os.Looper.loop(Looper.java:157)
04-30 10:35:20.454: E/AndroidRuntime(32387):    at android.app.ActivityThread.main(ActivityThread.java:5356)
04-30 10:35:20.454: E/AndroidRuntime(32387):    at java.lang.reflect.Method.invokeNative(Native Method)
04-30 10:35:20.454: E/AndroidRuntime(32387):    at java.lang.reflect.Method.invoke(Method.java:515)
04-30 10:35:20.454: E/AndroidRuntime(32387):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
04-30 10:35:20.454: E/AndroidRuntime(32387):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
04-30 10:35:20.454: E/AndroidRuntime(32387):    at dalvik.system.NativeStart.main(Native Method)
04-30 10:35:26.159: I/Process(32387): Sending signal. PID: 32387 SIG: 9
04-30 10:35:26.489: W/ActivityThread(844): Application com.buymysari can be debugged on port 8100...
04-30 10:35:26.509: W/ApplicationPackageManager(844): getCSCPackageItemText()
04-30 10:35:26.670: D/AbsListView(844): Get MotionRecognitionManager
04-30 10:35:26.700: D/AbsListView(844): Get MotionRecognitionManager
04-30 10:35:26.720: V/log(844):  UserID null
04-30 10:35:26.720: V/log(844):  StoreID null
04-30 10:35:26.730: V/log(844):  UserID  store_id --> 5
04-30 10:35:26.730: D/AndroidRuntime(844): Shutting down VM

4 个答案:

答案 0 :(得分:23)

在代码中,

PictureCallback mPicture = new PictureCallback() {
    @Override
    public void onPictureTaken(byte[] data, Camera camera) {

        if (ImageType.equals("AddPicture")) {
            Intent i = new Intent(CameraActivity.this,MarketPlaceActivity.class);
            i.putExtra("data", data);// problem lies here
            startActivity(i);
        } else {
            Intent returnIntent = new Intent();
            returnIntent.putExtra("data", data);// problem lies here
            setResult(RESULT_OK, returnIntent);
            CameraActivity.this.finish();
        }
    }
};

您尝试解析大数据和意图,但根据documentation,Binder交易失败,因为它太大了。

解决方案:

我建议您从收到的byte[] data创建位图并将图像存储在设备上。然后根据您的要求将该图像的路径解析为任何其他活动。

答案 1 :(得分:1)

请参阅this主题。 报价: 它失败是因为你试图将图像作为额外的意图发送而且它太大了。您无法使用IPC通信技术(如意图或服务/活页夹)发送图像,根据Android的版本,限制为1mb / 10mb。

答案 2 :(得分:1)

我认为问题出在这里:returnIntent.putExtra("data", data);。 交易数据的意图有限。如果您需要位图或大文件,则不得将其作为额外传递而是仅传递图像路径或uri,并在您显示或使用它的活动中创建位图或文件。

答案 3 :(得分:1)

就我而言,它是图像字节数组,它与 Intent Bundle extra 中的其他变量一起传递,并且它的大小太大,因此导致 TransactionTooLargeException。

解决方案:要么将图像字节数组存储在外部存储上,不要传入意图包的额外内容。