简书链接:android内容提供者权限之分享对话框中的打印选项选中报错分析
文章字数:260,阅读全文大约需要1分钟
无法打印应该不是权限问题,而是pdf问题。
此文件在外部应用缓存目录下
fileProvider内容提供者必须不允许导出,

1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="utf-8"?>
<paths>

<!-- <external-path path="Android/data/" name="files_root" />-->
<cache-path path="." name="match_cache_path" />
<external-cache-path name="match_external_cache_path" path="." />
<external-path path="/Android/data/" name="files_root" />
<external-path path="." name="external_storage_root" />
<external-path name="pic" path="Pictures" />
<root-path path="" name="device_root"/>

</paths>

根本原因是不支持excel打印,
错误信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
             E  Cannot open file
java.io.IOException: file not in PDF format or corrupted
at android.graphics.pdf.PdfRenderer.nativeCreate(Native Method)
at android.graphics.pdf.PdfRenderer.<init>(PdfRenderer.java:171)
at com.android.printspooler.renderer.PdfManipulationService$PdfRendererImpl.openDocument(PdfManipulationService.java:90)
at com.android.printspooler.renderer.IPdfRenderer$Stub.onTransact(IPdfRenderer.java:76)
at android.os.Binder.execTransactInternal(Binder.java:1154)
at android.os.Binder.execTransact(Binder.java:1123)
--------- beginning of crash
2024-06-03 16:50:16.752 28241-28241 AndroidRuntime com.android.bips D Shutting down VM
2024-06-03 16:50:16.753 28241-28241 AndroidRuntime com.android.bips E FATAL EXCEPTION: main
Process: com.android.bips, PID: 28241
java.lang.RuntimeException: Cannot print a malformed PDF file
at android.print.PrintManager$PrintDocumentAdapterDelegate$MyHandler.handleMessage(PrintManager.java:1103)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7723)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:612)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:997)

有关分享报错的解决经典案例
android - Permission Denial: reading androidx.core.content.FileProvider trying to share a video file - Stack Overflow

android - Permission Denial while sharing file with FileProvider - Stack Overflow

android - Permission Denial with File Provider through intent - Stack Overflow