来自内部存储的Intent.ACTION_SEND PDF文件仅适用于某些应用程序

我尝试从Intent.ACTION_SEND发送到PrinterShare应用程序(我已经购买了声称可以从应用程序内部存储打印文件的高级版本),从应用程序的内部存储器打印PDF文件。

我已经看了这个 , 这是复制我的文件到内部缓存感谢这一点 ,似乎PrinterShare应用程序获取我的文件,但不是“完全” – 它无法呈现文件,当我打印,它只是推出一个空的文件。

随着共享意图,我可以选择其他应用程序,如Gmail和普通的蓝牙,然后我可以发送PDF文件作为电子邮件附件或通过蓝牙到我的个人电话,它完美呈现。 只是当我尝试将其分享到Google照片,环聊,然后还有PrinterShare应用时,出现了一些奇怪的错误。

那么,如何调试一个只发生在有时候的问题呢?

在我的代码之前,我在内部存储中创建文件,如下所示:

val savePdf = File(view.filesDir, "printthis.pdf") 

这是我的共享意图建设(Kotlin):

 override fun printPdf() { copyFileToInternal() val uri = Uri.parse("content://my.package.android.app/printthis.pdf") Log.d("Print PDF from $uri") val shareIntent = Intent(Intent.ACTION_SEND) shareIntent.type = "image/*" shareIntent.flags = Intent.FLAG_GRANT_READ_URI_PERMISSION shareIntent.putExtra(Intent.EXTRA_STREAM, uri) (view as Context).startActivity(Intent.createChooser(shareIntent, "Print PDF")) } 

这是copyFileToInternal函数:

 private fun copyFileToInternal() { try { val inputStream = (view as Context).openFileInput("pop.pdf") val cacheDir = (view).cacheDir val outFile = File(cacheDir, "pop.pdf") val os = FileOutputStream(outFile.absolutePath) val buff = ByteArray(1024) var len: Int len = inputStream.read(buff) while (len > 0) { os.write(buff, 0, len) len = inputStream.read(buff) } os.flush() os.close() inputStream.close() } catch (e: IOException) { e.printStackTrace() Log.e("Could not copy file to internal cache. ", e) } } 

我的ContentProvider上唯一的自定义是openFile函数:

 @Throws(FileNotFoundException::class) override fun openFile(uri: Uri, mode: String): ParcelFileDescriptor? { val cacheDir = context.cacheDir val privateFile = File(cacheDir, "printthis.pdf") return ParcelFileDescriptor.open(privateFile, ParcelFileDescriptor.MODE_READ_ONLY) } 

我错过了什么?