안드로이드 TransactionTooLargeException 를 호출할 때 TakePicture

0

질문

필요를 활용 카메라에서 내 응용 프로그램를 위해 일하는 일이 변경되었 API>=28 에 비해 나는 어떻게 사용하는 곳에 그것을 사용할 수 있 startActivityForResult.

그러나 저는 이 문제를 직면하고 난 카메라 앱을 시작,즉시 이'TransactionTooLargeException'오류 메시지에는 디버그/run console.

호출에 대해 카메라,나는

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

                }
            }
    );

는 mGetContent 에서 정의 클래스

private ActivityResultLauncher<Uri> mGetContent;

나 AndroidManifest.xml 파일 내가 다음

<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 파일 내가

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

나는 설정 버튼을 내는 활동을 시작 사용하여 카메라

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

한 빨리 내가 버튼을 누르고 카메라의 응용 프로그램을 열고,내가 무엇을 얻을 수 있다고 가정은 지나치게 일반적인 오류 메시지가 표시됩니다.

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)

하 Google 검색하는 것을 발견하지만,문제가에 못 박는 것은 실제 문제입니다.

몇 가지 제안을 지적이 나를 향해 onSaveInstanceState,그래서 나는 재정의 중단점을 설정하고 그것에 무슨 일이 벌어지고 있는지 알아보기,하지만 그것을 통해 문제없이(에서 나는 무엇을 말할 수 있었).

종류의 손실이다.

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

최고의 응답

0

Wowsers 하게 무엇으로까지 번들에 onSaveInstanceState.

나는 몇 가지 imageviews,imagebuttons,및 단지 일반적인 버튼이 내 일을 더 쉽게 만들고 응용 프로그램를 위한 배송비는 소비자 부담입니다.

를 통해 갔고'saveState'의 모든 ImageViews 및 ImageButtons 에서 기본값이 true false,이후 나는 걱정하지 않은 그들이 어떤 상태에 있었다,그들은 단지 인내.

했다:안드로이드 viewHierarchyState 부터 1.2MB 다운 1.6KB 소 크기가 지금 3.3KB 고 그것은 더 이상 중단되지 않을 중단하는 앱을 가지고 카메라 앱에 액세스합니다.

TooLargeTool 었지만,나는 그것을 할 수 없는 방식으로 작동 Github 페이지를 말한다,나는 그것을 말하는'startLogging',그리고 내 활동에 충돌이 일어나고,내가 중단점을 설정하고 확인하면 그것은 로깅을 사용하여'isLogging'고 돌아왔다'true'이다.

결국 나는 그냥 그것이 로그 출력 TooLargeTool.bundleBreakdown(outState) 에 onSaveInstanceState.

감사 게이브 Sechan 및 ianhanniballake 를 가리키는 나에게 무엇을 향해 수 있습니다 많지는 않지만 거기에서 이를 위해 특정 예외가 나는 것을 의미가 있지만,그것은 나타납니다 그것은 개인에 따라 다릅니다.

정말로 원하는 구글의 것 인쇄 더 나은 설정의 오류에 대한 메시지에 그것을 쉽게 작동하는 활동이 문제였다(또는 나의 케이스에서,모든 3 개의 활동을 결합).

2021-11-25 05:48:50

다른 언어로

이 페이지는 다른 언어로되어 있습니다

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