【发布时间】:2020-02-19 21:19:23
【问题描述】:
在拔掉头发大约一周后,我终于完成并准备寻求帮助。
基本上在我的应用程序中,我使用下面的 Intent 创建一个新的 PDF,这是通过 Storage Access Framework 完成的。
val intent = Intent(Intent.ACTION_CREATE_DOCUMENT)
intent.addCategory(Intent.CATEGORY_OPENABLE)
intent.type = "application/pdf"
intent.putExtra(Intent.EXTRA_TITLE, title)
startActivityForResult(intent, 1234)
之后,我在 onActivityResult() 方法上获取 Uri,如下所示:
uri = dataIntent.data
if (uri != null) {
val takeFlags = data.flags and (Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
contentResolver.takePersistableUriPermission(uri, takeFlags)
generatePdf(uri)
}
PDF 生成没问题,当我需要调用 ACTION_VIEW 让用户查看生成的文件或使用 ACTION_SEND 共享文件时,问题就来了。
ACTION_VIEW 使用示例(是的,我同时使用 Kotlin 和 Java):
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setDataAndType(uri, mimeType);
startActivity(intent);
我这辈子都不知道如何获得另一个应用可以使用的 Uri。
到目前为止我尝试了什么:
- This answer,但会引发以下异常:java.lang.IllegalArgumentException:列“_data”不存在。可用列:[_display_name, _size]
- DocumentFile,使用 DocumentFile.fromFile(file),它将 Uri 从 content://com.myapp.provider/root/document/primary:folder-created-by- the-user/generated-pdf.pdf 到 file:///root/document/primary:folder-created-by-the-user/generated-pdf.pdf,仍然没有应用可以打开它
- 许多其他事情我什至不记得了
如果有人能对这个问题有所了解,将不胜感激。
【问题讨论】:
标签: android storage-access-framework