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 N

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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage