TakePicture çağrılırken Android TransactionTooLargeException

0

Soru

Uygulamamdaki kamerayı iş için kullanmam gerekiyor, startActivityForResult kullanabileceğim yerde nasıl yaptığıma kıyasla API >= 28'de işlerin değiştiğini görüyorum.

Ancak, kamera uygulamasını başlattığım ve hemen debug/run konsolunda 'TransactionTooLargeException' hata mesajını aldığım bir sorunla karşı karşıyayım.

Kamerayı çağırdığım için yapıyorum.

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

                }
            }
    );

Burada mGetContent sınıfta şu şekilde tanımlanır:

private ActivityResultLauncher<Uri> mGetContent;

Androidmanifest'imde.xml dosyası aşağıdakilere sahibim

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

File_paths dosyamda var

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

Etkinliğimde kamerayı kullanarak başlattığım bir düğme var

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

Düğmeye dokunduğumda ve kamera uygulaması açılır açılmaz, yalnızca aşırı genel bir hata mesajı olduğunu varsayabildiğim şeyi alıyorum.

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)

Bir şeyleri bulmak için Google'da arama yapmaya çalışıyorum, ancak asıl sorunun ne olduğunu anlamakta zorlanıyorum.

Bazı öneriler beni onsaveınstancestate'e yönlendirdi, bu yüzden bunu geçersiz kıldım ve neler olduğunu görmek için bir kesme noktası belirledim, ancak herhangi bir sorun yaşamadan (söyleyebildiğim kadarıyla) başardı.

Bu seferki biraz kayıp.

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

En iyi cevabı

0

Onsaveınstancestate'deki demeti neyin oluşturduğuna dair meraklılar.

Personelimiz için işleri kolaylaştırmak için uygulamamda bazı ımageviews, ımagebuttons ve sadece genel düğmeler var.

Tüm ImageViews ve ımagebutton'ların' savestate'ini ' true varsayılanından false değerine değiştirdim ve değiştirdim, çünkü hangi durumda oldukları umurumda değil, sadece görsel kılavuzlar.

Android'i aldı:viewHierarchyState 1.2 MB'den 1.6 kb'ye, Paket boyutum artık 3.3 KB ve kamera uygulamasını getirmek için uygulamayı askıya alırken artık çökmüyor.

TooLargeTool kullanışlıydı, ancak Github sayfasının söylediği gibi çalışmasını sağlayamadım, 'Başlatmaya' söyledim ve çökmenin gerçekleştiği etkinliğimde bir kesme noktası belirledim ve 'isLogging' kullanarak günlüğe kaydedilip kaydedilmediğini kontrol ettim ve 'doğru'olarak geri döndü.

Sonunda sadece çıktısını günlüğe kaydettim TooLargeTool.bundleBreakdown(outState) bu onSaveİnstanceState içinde.

Gabe Sechan ve ıanhanniballake'e beni ne olabileceğine işaret ettikleri için teşekkürler, bu özel istisna için fazla bir şey yok, yani var, ama herkes için farklı görünüyor.

Gerçekten Google'ın, hangi etkinliğin sorun olduğunu (veya benim durumumda, tüm 3 etkinliğin bir araya getirildiğini) çözmeyi kolaylaştırmak için daha iyi bir hata mesajı seti yazdırmasını diliyorum.

2021-11-25 05:48:50

Diğer dillerde

Bu sayfa diğer dillerde

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