大约一周拉出头发后,我终于完成工作并准备寻求帮助。
基本上在我的应用程序中,我使用下面的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。
到目前为止我尝试过的是:
如果有人可以阐明这个问题,将不胜感激。
就像blackapps在回应中所说的那样,我要做的就是实现ContentProvider,更具体地说是实现DocumentProvider。
跟随此链接,此链接才是最终解决问题的方法。我实现了一个CustomDocumentProvider,它在应用程序的私有文件(context.getFilesDir()。getAbsolutePath()+“ / folderToExpose”)中公开一个文件夹,此文件夹中创建的所有文件都公开给其他应用程序之后,我可以使用ACTION_VIEW和ACTION_SEND一般。
如果有人碰巧遇到了此问题,只需确保要公开的文件夹中不包含对应用程序至关重要的任何文件(例如数据库文件),因为用户将可以完全访问其所有内容。如果是新文件夹,请确保通过调用mkdirs()创建它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句