【发布时间】:2020-06-07 11:01:28
【问题描述】:
我面临的问题是,当尝试将更改保存到使用此 URI 打开的 PDF 文档时 content://xx.xxx.xxx.fileprovider/external/Download/Sync/FileName.pdf,我所做的任何更改在关闭文档后都不会保存。但是,当我使用创建另一种 URI 格式的示例应用程序时,例如 content://xx.xxx.xxx.file_provider/file%253A%252F%252F%252Fstorage%252Femulated%252F0%252FDownload%252FSync%252FFileName% 252F%252FEYV.pdf 更改保存成功。我也试过 ACTION_EDIT
val file = File(fileModel.path)
val uri = if (Build.VERSION.SDK_INT >= 24) {
FileProvider.getUriForFile(activity?.applicationContext!!, "$APP_ID.fileprovider", file)
} else {
Uri.fromFile(file)
}
val mime = activity?.applicationContext!!.contentResolver.getType(uri)
val pdfIntent = Intent(Intent.ACTION_VIEW)
pdfIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY)
pdfIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
pdfIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
pdfIntent.setDataAndType(uri, mime)
val packageManager = activity?.applicationContext?.packageManager
val activities = packageManager!!.queryIntentActivities(pdfIntent, PackageManager.MATCH_DEFAULT_ONLY)
for (resolvedIntentInfo in activities) {
val packageName = resolvedIntentInfo.activityInfo.packageName
activity?.applicationContext?.grantUriPermission(packageName, uri, Intent.FLAG_GRANT_READ_URI_PERMISSION)
activity?.applicationContext?.grantUriPermission(packageName, uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
}
if (pdfIntent.resolveActivity(activity!!.packageManager) != null) {
//startActivity(Intent.createChooser(pdfIntent, "Open"))
startActivity(pdfIntent)
}
【问题讨论】:
-
如果您打开 PDF 进行编辑并且它没有保存您所做的更改,那么问题不是您自己的应用程序。可能第三方应用程序不提供此类功能。
-
感谢@PratikButani,但我安装了一些可以打开 PDF 的应用程序并保存了更改。我看到的不同之处在于,这些应用正在向意图发送其他类型的 URI
-
它只不过是编码的 URI。究竟是什么问题?
-
@PratikButani 请仔细阅读问题。
-
The difference I saw is that those apps are sending other kind of URI to the intent????您的应用程序正在使用意图将 uri(pdf 文件)发送到外部应用程序。现在你告诉那个外部应用程序正在向一个意图发送一个 uri?那会是什么?我没有抓住那个场景。