Android TransactionTooLargeException quando si chiama TakePicture

0

Domanda

Bisogno di utilizzare la macchina fotografica in app per lavoro, vedo che le cose sono cambiate in API >= 28 rispetto a come l'ho usato per farlo dove ho potuto utilizzare startActivityForResult.

Però mi trovo di fronte a un problema in cui lancio l'app fotocamera, e prendere immediatamente l' 'TransactionTooLargeException' messaggio di errore nella finestra di debug/eseguire console.

Per richiamare la fotocamera, mi sto facendo

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

                }
            }
    );

Dove mGetContent è definito nella classe

private ActivityResultLauncher<Uri> mGetContent;

Nel mio AndroidManifest.xml file ho il seguente

<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>

Nel mio file_paths file che ho

<?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>

Ho un pulsante set up nella mia attività in cui lancio la fotocamera utilizzando

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);
};

Non appena si tocca il pulsante, e l'app fotocamera si apre, ottengo quello che posso solo supporre è troppo generica messaggio di errore.

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)

State cercando per ricerca con Google per trovare le cose, ma avendo difficoltà a inchiodare giù che il problema effettivo è.

Alcuni suggerimenti che mi hanno indirizzato verso la onSaveInstanceState, così ho override e impostare un punto di interruzione su di esso per vedere che cosa stava succedendo, ma è fatta senza problemi (da quello che posso dire).

Tipo di in perdita con questo.

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

Migliore risposta

0

Wowsers che compongono il bundle in onSaveInstanceState.

Ho alcuni imageviews, imagebuttons, e solo generale pulsanti nella mia app per rendere le cose più facile per il nostro personale.

Sono andato attraverso e cambiato il 'saveState' di tutti i ImageViews e ImageButtons dal valore predefinito è true a false, dal momento che non si cura di ciò che stato in cui erano, sono solo guide visive.

Ha preso android:viewHierarchyState da 1.2 MB giù a 1,6 KB, il mio Pacco size è ora 3.3 KB e non si blocca più quando si sospende l'app per visualizzare l'app fotocamera.

TooLargeTool era utile, ma non riuscivo a farlo funzionare il modo in cui la pagina di Github dice, l'ho detto al 'startLogging', e nella mia attività in cui l'incidente stava accadendo, io impostare un punto di interruzione e controllato se è stato effettuato utilizzando 'isLogging' ed è tornato a 'true'.

Alla fine ho appena fatto registrare l'output di TooLargeTool.bundleBreakdown(outState) nel onSaveInstanceState.

Grazie a Gabe Sechan e ianhanniballake per indicarmi verso quello che potrebbe essere, non c'è molto là fuori per questo particolare eccezione, voglio dire, c'è, ma sembra che sia diverso per tutti.

Desidero veramente Google sarebbe stampare una serie di messaggi di errore per renderla più facile che l'attività era il problema (o, nel mio caso, tutte e 3 le attività combinato).

2021-11-25 05:48:50

In altre lingue

Questa pagina è in altre lingue

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