通过Android Intent编辑共享存储上的文件

时间:2018-08-19 22:55:21

标签: android android-intent android-fileprovider

是否可以从共享存储中打开文件,以便目标活动/应用程序可以编辑文件。目前,根据所选择的应用程序,我的行为不一致。

以下是用于打开文件的代码(显然,我关心的是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级别的权限打开它。显然,目标应用程序必须具有读写外部存储的权限。

0 个答案:

没有答案