Carta di transazione non rioutput durante la ripresa dell'image della telecamera

Ottengo l'errore di transazione del raccoglitore non riuscito nel logcat quando ritorna l'image ripresa con la camera dalla telecamera indietro all'intento genitore (come byte [] usando putExtra). Non capisco perché, non è come una grande bitmap o niente. Accade solo quando faccio foto con un sacco di luce, perché allora il byte [] è più grande. L'errore si verifica quando si lascia l'intenzione della camera. Qualcuno vede un errore nel mio codice?

Ecco il codice dell'intento della camera:

  • L'image di Android selezionata dall'indirizzo Galleria L'orientamento è sempre 0: Exif TAG
  • tools.jar sembra non essere in ClassPath di Android Studio in Windows 8
  • Come risolvere il dispositivo ADB non autorizzato nel dispositivo host Android ADB?
  • Android voglio get l'angolo di rotazione per il dispositivo
  • Thrift client su Android
  • Android: Come cambiare l'icona "Home" di ActionBar per essere qualcosa di diverso dall'icona dell'app?
  • package example.imaging.ape; import java.io.IOException; import java.util.Iterator; import java.util.Set; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.PixelFormat; import android.hardware.Camera; import android.hardware.Camera.AutoFocusCallback; import android.os.Bundle; import android.util.Log; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.view.View.OnTouchListener; public class TakePicture extends Activity implements SurfaceHolder.Callback{ Camera mCamera; Boolean mPreviewRunning = false; int imageLayoutHeight; int imageLayoutWidth; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setup camera surface getWindow().setFormat(PixelFormat.TRANSLUCENT); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.cameralayout); SurfaceView mSurfaceView = (SurfaceView) findViewById(R.id.hist_surface_camera); SurfaceHolder mSurfaceHolder = mSurfaceView.getHolder(); mSurfaceHolder.addCallback(this); mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); Bundle extras = getIntent().getExtras(); imageLayoutHeight = extras.getInt("layoutHeight"); imageLayoutWidth = extras.getInt("layoutWidth"); OnTouchListener touchListener = new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent e) { System.out.println("MAKING PICTURE"); mCamera.autoFocus(cb); return false; } }; //setup touch listener mSurfaceView.setOnTouchListener(touchListener); } AutoFocusCallback cb = new AutoFocusCallback() { public void onAutoFocus(boolean success, Camera c) { c.takePicture(null, null, mPictureCallback); } }; Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() { public void onPictureTaken(byte[] imageData, Camera c) { System.out.println("Picture taken, now returning"); Intent resultIntent = new Intent(); resultIntent.putExtra("cameraImage", imageData); System.out.println("put Extra"); setResult(Activity.RESULT_OK, resultIntent); finish(); } }; //initialize camera public void surfaceCreated(SurfaceHolder holder) { mCamera = Camera.open(); } public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { if (mPreviewRunning) { mCamera.stopPreview(); } Camera.Parameters p = mCamera.getParameters(); p.setPreviewSize(h, w); System.out.println("PreviewSize: " + h + "," + w); p.setPictureSize(h*3,w*3); // is around 1200x900 p.set("rotation", 90); mCamera.setParameters(p); try { mCamera.setPreviewDisplay(holder); } catch (IOException e) { e.printStackTrace(); } mCamera.startPreview(); mPreviewRunning = true; } public void surfaceDestroyed(SurfaceHolder holder) { mCamera.stopPreview(); mPreviewRunning = false; mCamera.release(); } } 

    Ecco il codice che chiama l'intenzione della telecamera:

     Intent intent = new Intent(Example.this, TakePicture.class); intent.putExtra("layoutWidth",layoutWidth); intent.putExtra("layoutHeight",layoutHeight); startActivityForResult(intent,0); 

    3 Solutions collect form web for “Carta di transazione non rioutput durante la ripresa dell'image della telecamera”

    Per qualche ragione, Android non piace quando si tenta di passare l'arrays raw byte [] o una Bitmap creata da esso. Alcune persone hanno avuto successo nel compressione della Bitmap risultante e passandola attraverso Intent. Vorrei raccomandare di salvare l'image in un file innanzitutto e di submit il path tramite l'intento.

    Durante una chiamata di procedura remota, gli argomenti e il valore restituito della chiamata vengono trasferiti come oggetti di pacchetto memorizzati nel buffer di transazione Binder. Se gli argomenti o il valore di restituzione sono troppo grandi per essere inseriti nel buffer di transazione, la chiamata non sarà rioutput e TransactionTooLargeException verrà lanciato.

    fai riferimento a questo form di collegamento e sviluppatore Android

    L'emulatore perde gli attributi di carico di memory nell'intento, quindi l'exception si verifica

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.