Android TransactionTooLargeException atunci când de asteptare TakePicture

0

Problema

Nevoie pentru a utiliza camera foto în aplicația mea de lucru, am vedea că lucrurile s-au schimbat în API >= 28 față de cum obișnuiam să fac asta în cazul în care am putea utiliza startActivityForResult.

Cu toate acestea eu sunt confruntă cu o problemă în cazul în care am lansa aplicația camerei, și a obține imediat 'TransactionTooLargeException' mesaj de eroare în debug/rula consola.

Pentru apelarea camera, fac

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

                }
            }
    );

În cazul în care mGetContent este definită în clasa ca

private ActivityResultLauncher<Uri> mGetContent;

În AndroidManifest.xml fișierul trebuie următoarele

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

În file_paths fișier trebuie

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

Am un buton de setare în activitatea mea de unde am lansa camera folosind

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

De indata ce am apăsați pe butonul, și aplicația camerei se deschide, am obține ceea ce pot doar să presupun că este prea generală mesaj de eroare.

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)

Încearcă să căutare Google pentru a găsi lucruri, dar având probleme în a scrie ce problema reală este.

Unele sugestii m-a îndreptat spre onSaveInstanceState, așa că am trece peste asta și a seta un breakpoint pe ea pentru a vedea ce se întâmplă, dar a trecut fără probleme (din ceea ce am putea spune).

Cam la o pierdere cu asta.

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

Cel mai bun răspuns

0

Cred ca pentru ceea ce face la pachet în onSaveInstanceState.

Am niște imageviews, imagebuttons, și doar butoane generale în aplicația mea pentru a face lucrurile mai ușor pentru personalul nostru.

Am trecut prin și a schimbat 'saveState' de toate ImageViews și ImageButtons de default de adevărat la fals, deoarece nu-mi pasă în ce stare erau, acestea sunt doar ghiduri vizuale.

A luat android:viewHierarchyState de 1.2 MB până la 1.6 KB, Coletul meu a dimensiune este acum 3.3 KB și că nu mai blochează atunci când suspendarea app pentru a aduce aplicația camerei.

TooLargeTool a fost util, dar nu am putut face să funcționeze așa pagina Github spune, ți-am spus să startLogging', și în activitatea mea în cazul în care accidentul a fost întâmplă, am stabilit un punct de întrerupere și verificat dacă a fost logare folosind 'isLogging' și s-a întors "adevărat".

În final, am avut de a conecta ieșirea din TooLargeTool.bundleBreakdown(outState) în onSaveInstanceState.

Datorită Gabe Sechan și ianhanniballake pentru mine, arătând spre ceea ce ar putea fi, nu e de mult acolo pentru ca această excepție special, adică, nu există, dar se pare că acesta este diferit pentru toată lumea.

Vrea Google ar imprima un set de mesaje de eroare pentru a face mai ușor de a lucra în care activitatea a fost problema (sau în cazul meu, toate cele 3 activități combinate).

2021-11-25 05:48:50

În alte limbi

Această pagină este în alte limbi

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