【问题标题】:Android ACTION_EDIT Intent to edit imageAndroid ACTION_EDIT 意图编辑图像
【发布时间】:2017-04-08 22:43:44
【问题描述】:

我正在开发一个应用程序,该应用程序允许用户拍照、绘画,然后将它们上传到我们的社交媒体应用程序中。我想使用第三方应用程序进行绘图,以减轻我们的工作量。我在这里找到了许多有关如何执行此操作的答案,以下大部分代码均取自这些答案。当我尝试不同的答案组合时,我总是在 Intent 上遇到 Toast 错误。我得到的两个错误是“无法打开文件”和“无法编辑图像”。前者听起来像文件权限问题,我认为应该从下面的 grantUriPermissions 解决方法中得到解决。另一个我不知道的错误。

// Code taken from answer on http://stackoverflow.com/questions/15699299/android-edit-image-intent
final Uri uri = Uri.parse(this.photoPath);
int flags = Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION;

Intent editIntent = new Intent(Intent.ACTION_EDIT);
editIntent.setDataAndType(uri, "image/*");
editIntent.addFlags(flags);
editIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);

// This work-around allows the intent to access our private FileProvider storage.
// Code taken from http://stackoverflow.com/questions/24835364/android-open-private-file-with-third-party-app
List<ResolveInfo> resInfoList = this.getPackageManager().queryIntentActivities(editIntent, PackageManager.MATCH_DEFAULT_ONLY);
for (ResolveInfo resolveInfo : resInfoList) {
    String packageName = resolveInfo.activityInfo.packageName;
    this.grantUriPermission(packageName, uri, flags);
}

startActivityForResult(Intent.createChooser(editIntent, null), EDIT_INTENT);

有人以前看过这些 Toast 消息并能够解决它们吗?

【问题讨论】:

  • photoPath 指向哪里?另请注意,那些Intent 标志和grantUriPermission() 循环对文件无用;这些是来自ContentProviderUri 值,例如FileProvider。此外,putExtra() 调用是无用的,因为EXTRA_OUTPUT 用于ACTION_IMAGE_CAPTUREACTION_VIDEO_CAPTUREnot ACTION_EDIT
  • photoPath 是在之前创建的文件上调用 .getAbsolutePath() 的结果。该文件由应用程序中的 FileProvider 管理,这就是为什么我觉得我需要循环。我可能弄错了;我不知道Android文件权限的所有细节。

标签: android android-intent


【解决方案1】:

我发现了问题所在。我对 Uri.parse 的使用是错误的,因为我在我的应用程序中使用了 FileProvider。将该行替换为 FileProvider.getUriForFile 使应用程序按预期工作。

【讨论】:

  • 我已经尝试过您的代码,但是,我找不到返回已编辑图像文件路径的方法。我检查了onActivityResult(),但是data 参数总是返回null,结果为Activity.RESULT_CANCELED,我找不到方法来实现Activity.RESULT_OK。因此,您如何设法将图像文件路径返回到onActivityResult()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多