Necesidad de utilizar la cámara en mi app para el trabajo, veo que las cosas han cambiado en la API >= 28 en comparación a como solía hacerlo en el que podría utilizar startActivityForResult.
Sin embargo estoy frente a un problema donde puedo iniciar la aplicación de la cámara, y de inmediato obtener la 'TransactionTooLargeException' mensaje de error en la depuración y ejecución de la consola.
Para llamar a la cámara, yo estoy haciendo
mGetContent = registerForActivityResult(
new ActivityResultContracts.TakePicture(),
result -> {
if (result) {
}
}
);
Donde mGetContent se define en la clase
private ActivityResultLauncher<Uri> mGetContent;
En mi AndroidManifest.xml archivo tengo la siguiente
<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>
En mi file_paths archivo tengo
<?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>
Tengo un botón configurado en mi actividad donde me lanzamiento de la cámara
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);
};
Tan pronto como me toque en el botón, y la aplicación de la cámara se abre, me sale lo que sólo puedo asumir que es demasiado general mensaje de error.
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)
Estado tratando de búsqueda de Google para encontrar las cosas, pero teniendo problemas para clavar lo que el problema real es.
Algunas sugerencias me señaló hacia el onSaveInstanceState, así que me anulación y establecer un punto de interrupción en él para ver lo que estaba pasando, pero lo hizo a través sin ningún tipo de problemas (de lo que yo podría decir).
Tipo de en una pérdida con este.