TransactionTooLargeException beim Senden von Binärinhalten mit Intents [closed]
Ich muss binären Inhalt von meiner App an die App senden, die diesen Dateityp auf dem Gerät öffnet.
Ich folge diesen Anweisungen:https: //developer.android.com/training/sharing/send.html#send-binary-conten
Hier ist mein Code:
final FileType fileType
final File file;
final Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.putExtra(Intent.EXTRA_STREAM, FileProvider.getUriForFile(AncestryApplication.getAppContext(), AncestryApplication.getAppContext().getApplicationContext().getPackageName() + ".provider", file));
intent.setType(fileType.getMimeType());
startActivity(intent);
Ein paar Dinge
Wenn ich die Intent-Aktion von ACTION_VIEW in ACTION_SEND ändere, wird die falsch mögliche Liste der Apps zum Öffnen meiner Datei angezeigt.ACTION_SEND scheint zu funktionieren, aber nur mit kleinen Dateigrößenintent.setDataAndType()
scheint auf Geräten mit OS M und niedriger einwandfrei zu funktionieren. Auf N bekomme ich das gleicheTransactionTooLargeException
Am Ende ist das, was ich erreichen muss:
Ich habe bereits eine Datei gespeichert und sie wird unter @ gespeicherfile:///storage/emulated/0/Download/TempFile.html
Da die Datei möglicherweise zu groß ist, muss ich nur den Speicherort der Datei an eine Drittanbieter-App (z. B. Adobe PDF Reader) senden, um die Datei zu öffnen. Keine Probleme bei M oder niedriger, Tonnen von Problemen bei NHaben Sie eine Idee, was ich falsch machen könnte? Ich habe einige Tage lang versucht, dieses Problem zu lösen, und ich habe unzählige Tutorials und SO-Vorschläge gelesen, ohne eine endgültige Antwort zu erhalten.
Vielen Dank
EDIT: hier ist mein Stacktrace:
AndroidRuntime: FATAL EXCEPTION: main
Process: com.myapp.android.apps.myapp, PID: 26785
java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 27943540 bytes
at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3752)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
Caused by: android.os.TransactionTooLargeException: data parcel size 27943540 bytes
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(Binder.java:615)
at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:3606)
at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3744)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
EDIT 2: HinzugefügtonSaveInstanceState()
code from base fragment:
@Override
public void onSaveInstanceState(final Bundle outState) {
mSaveInstanceStateCalled = true;
outState.putBoolean(KEY_PROCESSING_SAVE, mSaveInProgress);
}