Android TransactionTooLargeException cuando se llama a TakePicture

0

Pregunta

Necesidad de utilizar la cámara en mi app para el trabajo, veo que las cosas han cambiado en la API >= 28 en comparación a como solía hacerlo en el que podría utilizar startActivityForResult.

Sin embargo estoy frente a un problema donde puedo iniciar la aplicación de la cámara, y de inmediato obtener la 'TransactionTooLargeException' mensaje de error en la depuración y ejecución de la consola.

Para llamar a la cámara, yo estoy haciendo

mGetContent = registerForActivityResult(
            new ActivityResultContracts.TakePicture(),
            result -> {
                if (result) {

                }
            }
    );

Donde mGetContent se define en la clase

private ActivityResultLauncher<Uri> mGetContent;

En mi AndroidManifest.xml archivo tengo la siguiente

<provider
        android:name="androidx.core.content.FileProvider"
        android:authorities="com.test.fileprovider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_paths" />
    </provider>

En mi file_paths archivo tengo

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <files-path
        name="files"
        path="."/>
    <files-path
        name="app_images"
        path="./files/"/>
</paths>

Tengo un botón configurado en mi actividad donde me lanzamiento de la cámara

findViewById(R.id.button)).setOnClickListener(v -> {
    File directory = new File(context.getFilesDir(), "app_images");
    if (!directory.exists()) directory.mkdir();

    File file = new File(directory, "image.jpg");

    Uri uri = getUriForFile(this, "com.test.fileprovider", file);

    mGetContent.launch(uri);
};

Tan pronto como me toque en el botón, y la aplicación de la cámara se abre, me sale lo que sólo puedo asumir que es demasiado general mensaje de error.

E/JavaBinder: !!! FAILED BINDER TRANSACTION !!!  (parcel size = 1284092)
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.test, PID: 14296
    java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 1284092 bytes
        at android.app.servertransaction.PendingTransactionActions$StopInfo.run(PendingTransactionActions.java:161)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7397)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:935)
     Caused by: android.os.TransactionTooLargeException: data parcel size 1284092 bytes
        at android.os.BinderProxy.transactNative(Native Method)
        at android.os.BinderProxy.transact(BinderProxy.java:511)
        at android.app.IActivityTaskManager$Stub$Proxy.activityStopped(IActivityTaskManager.java:4524)
        at android.app.servertransaction.PendingTransactionActions$StopInfo.run(PendingTransactionActions.java:145)

Estado tratando de búsqueda de Google para encontrar las cosas, pero teniendo problemas para clavar lo que el problema real es.

Algunas sugerencias me señaló hacia el onSaveInstanceState, así que me anulación y establecer un punto de interrupción en él para ver lo que estaba pasando, pero lo hizo a través sin ningún tipo de problemas (de lo que yo podría decir).

Tipo de en una pérdida con este.

android android-camera java
2021-11-24 06:48:37
1

Mejor respuesta

0

Wowsers como lo hace el paquete en el onSaveInstanceState.

Tengo algunas imageviews, imagebuttons, y en general los botones de mi app para hacer las cosas más fácil para nuestro personal.

Me pasó y cambió el 'saveState' de todos los ImageViews y ImageButtons desde el valor predeterminado de true a false, ya no me importa lo que estado en que se encontraban, sólo son guías visuales.

Tomó el android:viewHierarchyState de 1.2 MB abajo a 1.6 KB, mi Parcela tamaño es ahora 3.3 KB y ya no se bloquea cuando se suspende la aplicación para abrir la aplicación de cámara.

TooLargeTool fue útil, pero no pude hacer que funcione de la manera en la página de Github, dice, le dije a 'startLogging', y en mi actividad en la que el choque estaba sucediendo, me establezca un punto de interrupción y comprobar si era el registro con 'isLogging' y volvió a 'true'.

Al final, yo sólo tenía que registrar la salida de TooLargeTool.bundleBreakdown(outState) en el onSaveInstanceState.

Gracias a Gabe Sechan y ianhanniballake para que me señala hacia lo que podría ser, no hay mucho por ahí sobre esta excepción, quiero decir, no es, pero parece que es diferente para cada uno.

Realmente deseo que Google imprimir un mejor conjunto de mensajes de error para facilitar el trabajo que la actividad fue el problema (o en mi caso, todos los 3 actividades combinadas).

2021-11-25 05:48:50

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................