Android TransactionTooLargeException ao chamar TakePicture

0

Pergunta

Necessidade de utilizar a câmara em meu aplicativo para o trabalho, eu vejo que as coisas mudaram na API >= 28 relação à forma como eu costumava fazer isso onde eu poderia usar startActivityForResult.

No entanto estou com um problema onde eu lançar o aplicativo da câmera, e receba imediatamente a 'TransactionTooLargeException' mensagem de erro no debug/executar o console.

Para chamar a câmera, eu estou fazendo

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

                }
            }
    );

Onde mGetContent é definido na classe como

private ActivityResultLauncher<Uri> mGetContent;

No meu AndroidManifest.xml arquivo de eu ter a seguinte

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

Na minha file_paths arquivo eu tenho

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

Eu tenho um botão configurar na minha actividade onde eu lançar a câmera usando

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

Assim que eu toque no botão, e o app câmera abre, eu tenho o que eu só posso supor é excessivamente geral mensagem de erro.

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)

Foi tentando de pesquisa do Google para encontrar as coisas, mas tendo problemas para pregar para baixo que o real problema.

Algumas sugestões apontou-me para o onSaveInstanceState, então eu substituir e definir um ponto de interrupção para ver o que estava acontecendo, mas ele fez isso sem problemas (a partir do que eu poderia dizer).

Tipo de prejuízo com este.

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

Melhor resposta

0

Wowsers, como o que compõe o pacote no onSaveInstanceState.

Eu tenho alguns imageviews, imagebuttons, e público em geral botões no meu aplicativo para facilitar as coisas para o nosso pessoal.

Eu fui através de e mudou o 'saveState' de todos os ImageViews e ImageButtons do padrão de verdadeiro para falso, desde que eu não me importo com o que o estado em que estavam, eles são apenas guias visuais.

Tomou o android:viewHierarchyState de 1.2 MB para baixo para 1,6 KB, a minha Parcela de tamanho é agora 3.3 KB e ele não falha quando suspender o aplicativo para abrir o aplicativo câmera.

TooLargeTool foi útil, mas eu não poderia fazê-lo funcionar da maneira que o Github página diz, eu disse para ele 'startLogging', e na minha actividade onde a falha estava acontecendo, eu defina um ponto de interrupção e verificado se foi a sessão usando 'isLogging' e voltou 'true'.

No final, eu só tinha ele de log de saída do TooLargeTool.bundleBreakdown(outState) no onSaveInstanceState.

Graças a Gabe Sechan e ianhanniballake por me apontar na direção do que poderia ser, não há muito lá fora para esta exceção específica, quer dizer, existe, mas parece que é diferente de pessoa para pessoa.

Realmente desejo que o Google iria imprimir um melhor conjunto de mensagens de erro para torná-lo mais fácil para descobrir qual a atividade foi o problema (ou no meu caso, todas as 3 atividades combinadas).

2021-11-25 05:48:50

Em outros idiomas

Esta página está em outros idiomas

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