Android TransactionTooLargeException pri volaní TakePicture

0

Otázka

Je potrebné využívať fotoaparát vo svojej aplikácii pre prácu, vidím, že veci sa zmenili v API >= 28 v porovnaní s ako som sa používa na to, kde by som mohol použiť startActivityForResult.

Však ja som čelí problému, kde som spustenie aplikácie fotoaparát, a okamžite získať 'TransactionTooLargeException' chybové hlásenie v debug/spustiť konzolu.

Pre vyvolanie fotoaparát, ja robím

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

                }
            }
    );

Kde mGetContent je definovaná v triede ako

private ActivityResultLauncher<Uri> mGetContent;

V mojom AndroidManifest.xml súbor mám tieto

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

V mojom file_paths súbor mám

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

Mám tlačidlo nastaviť v mojej aktivity, kde som spustenie fotoaparátu pomocou

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

Hneď, ako som klepnite na tlačidlo, a aplikácia fotoaparát otvorí, som si to, čo ja môžem len predpokladať, je príliš všeobecná chybová správa.

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)

Boli snaží vyhľadávania Google nájsť veci, ale problémy pribíjanie nadol, čo je skutočný problém.

Niektoré návrhy, ukázal mi k onSaveInstanceState, tak som prepísať a nastaviť bod prerušenia na to, aby sme videli, čo sa deje, ale robil to prostredníctvom bez akýchkoľvek problémov (z toho, čo som mohla povedať).

Druh nenachádzal s týmto.

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

Najlepšiu odpoveď

0

Wowsers, ako sa čo robí až zväzku v onSaveInstanceState.

Mám nejaké imageviews, imagebuttons, a len všeobecné tlačidlá v mojej aplikácii, aby sa veci jednoduchšie pre našich zamestnancov.

Prešiel som a zmenil 'saveState" všetkých ImageViews a ImageButtons z predvolenej z true na false, pretože je mi jedno, čo tvrdia, že boli, sú len sprievodcovia.

Vzal android:viewHierarchyState z 1,2 MB nadol 1.6 KB, moja veľkosť pozemku je teraz 3.3 KB a to už zlyhá, keď sa zastavila app vychovávať aplikácie fotoaparát.

TooLargeTool bolo užitočné, ale nemohol som, aby to fungovalo spôsobom, akým Github strane hovorí, povedal som to na "startLogging", a v mojom činnosť, ak havárie sa deje, som nastaviť bod prerušenia a skontrolovať, či to bolo prihlásenie pomocou "isLogging" a to vrátil "true".

Na konci som len mal denník výstup TooLargeTool.bundleBreakdown(outState) v onSaveInstanceState.

Vďaka Darček Sechan a ianhanniballake pre ukázal mi k tomu, čo by to mohlo byť, nie je toho veľa, tam na pre tento konkrétny výnimkou, myslím, že tam je, ale zdá sa, že to je odlišná pre každého.

Naozaj chcieť Google by vytlačiť lepšie sada chybové správy pre to, aby bolo jednoduchšie zistiť, ktoré aktivity bol problém (alebo v mojom prípade všetky 3 činností v kombinácii).

2021-11-25 05:48:50

V iných jazykoch

Táto stránka je v iných jazykoch

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