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:

  • Come implementare la barra di avanzamento del file di caricamento in android
  • Metodo DSL non supportto di Gradle trovato: 'exclude ()'
  • Immagine ritaglia e ridimensiona in Android
  • Come creare un RelativeLayout in modo programmato con due pulsanti uno sopra l'altro?
  • Rx Osserva valori emettitori periodicamente
  • Premere Proguard durante l'utilizzo di GSON
  • 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.