我有以下应在外部应用中打开PDF的代码段:
Uri uri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".provider", new File(path));
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setDataAndType(uri, "application/pdf");
context.startActivity(intent);
这会在Adobe Reader中打开PDF,但我的应用程序也会因TransactionTooLargeException
例外而崩溃。
从外观上看,我只是通过意图发送文件URI和类型,因此StackOvrflow的其他答案的1MB限制并不真正适用。
堆栈跟踪:
java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 20439376 bytes
at android.app.ActivityThread$StopInfo.run(ActivityThread.java:4211)
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:6688)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
Caused by: android.os.TransactionTooLargeException: data parcel size 20439376 bytes
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(Binder.java:628)
at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:4132)
at android.app.ActivityThread$StopInfo.run(ActivityThread.java:4203)
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:6688)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
我错过了什么?
谢谢!
答案 0 :(得分:0)
我遇到了这个错误,PDF数据东西变成了红色鲱鱼(支持PDF从应用程序崩溃时成功打开的事实。)
在我的情况下,发生错误是因为我试图在活动onSaveInstanceState捆绑包中存储太多数据。在操作上,我得到的堆栈跟踪几乎相同。