android - 在 3rd 方应用程序中打开 PDF 会导致 TransactionTooLargeException

标签 android

我有以下代码 fragment ,应该在外部应用程序中打开 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);

这会在 Adob​​e Reader 中打开 PDF,但是我的应用程序也会因 TransactionTooLargeException 而崩溃异常(exception)。

从外观上看,我只是通过 Intent 发送文件 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) 

我错过了什么?

谢谢!

最佳答案

我遇到了这个错误,并且 PDF 数据的东西是一个红鲱鱼(由 PDF 成功打开而应用程序从崩溃中启动的事实支持。)

就我而言,发生错误是因为我试图在 Activity onSaveInstanceState 包中存储太多数据。我在操作处得到了一个非常相同的堆栈跟踪。

关于android - 在 3rd 方应用程序中打开 PDF 会导致 TransactionTooLargeException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46525695/

相关文章:

javascript - 使用 Javascript 在 Android 中抑制/检测旋转

android - 使用带 Fragment 的 DrawerLayout 时设置 ListView 的 LayoutParams

java - 如何将 "propagate"将一个 `ArrayList<String>` 排序到另一个?

java - setImageDrawable 之后滞后

android - 验证首选项。安卓

java - 开关 : Why can't this be done? 中的静态最终 Int

android - ServerSocket 的服务 - 它应该在一个单独的线程中吗?

java - Android Java函数参数中的 "..."和 "[]"有什么区别?

javascript - 找不到 'aapt' 工具!您可能需要更新您的 Android SDK,包括平台工具

java - Android - 图像裁剪未加载图像