是否可以从共享存储中打开文件,以便目标活动/应用程序可以编辑文件。目前,根据所选择的应用程序,我的行为不一致。
以下是用于打开文件的代码(显然,我关心的是allowEdit == true时的情况):
Uri contentUrl = FileProvider.getUriForFile(appContext.getApplicationContext(), appContext.getApplicationContext().getPackageName() + ".fileprovider", attachmentFile);
Intent intent = ShareCompat.IntentBuilder.from(this)
.setStream(contentUrl)
.setType(type)
.getIntent();
intent.setAction(allowEdit?Intent.ACTION_EDIT:Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setDataAndType(contentUrl, type);
if (allowEdit) {
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
List<ResolveInfo> resInfoList = this.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
for (ResolveInfo resolveInfo : resInfoList) {
String packageName = resolveInfo.activityInfo.packageName;
this.grantUriPermission(packageName, contentUrl, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
}
}
startActivity(intent);
文件最初保存到:
new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), folderName);
例如,如果我使用Xodo打开PDF文件,则它将允许我直接编辑文件。如果我使用Microsoft Word打开DOCX文件,它将以只读方式打开文件。令人讨厌的是,在Microsoft Word中,我可以使用“另存为”将文件保存在自身顶部,因此从该角度来看文件不会被锁定。
我要查找的是是否有选项将文件路径传递给目标应用程序,并使其具有O / S级别的权限打开它。显然,目标应用程序必须具有读写外部存储的权限。