की जरूरत का उपयोग करने के लिए कैमरे के लिए अपने अनुप्रयोग में काम करते हैं, मैं देख रहा हूँ कि चीजों में बदल दिया है एपीआई >= 28 लिए कैसे की तुलना में मैं करने के लिए इस्तेमाल करते हैं, यह है जहां मैं कर सकता startActivityForResult.
हालांकि मैं कर रहा हूँ एक समस्या का सामना जहां मैं कैमरा अनुप्रयोग शुरू, और तुरंत मिल 'TransactionTooLargeException' त्रुटि संदेश डीबग/चलाने के लिए कंसोल ।
के लिए फोन के कैमरे के साथ, मैं कर रहा हूँ
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)
की कोशिश कर रहा करने के लिए गूगल खोज करने के लिए चीजों को खोजने, लेकिन मुसीबत वह नीचे क्या वास्तविक समस्या है.
कुछ सुझाव मुझे बताया की दिशा में onSaveInstanceState, तो मुझे लगता है कि ओवरराइड और एक breakpoint सेट पर यह देखने के लिए क्या हो रहा था, लेकिन इसे बनाया के माध्यम से किसी भी मुद्दे के बिना (मैं क्या बता सकता है).
तरह के एक नुकसान में इस एक के साथ.