2017-04-08 88 views
0

我正在开发一个应用程序,允许用户拍照,在他们身上绘制,然后将其上传到我们的社交媒体应用程序中。我想为绘图使用第三方应用程序来减轻我们的工作负担。我在这里找到了很多关于如何这样做的答案,下面的代码大部分来自这些答案。当我尝试不同的答案组合时,我总是在意图上得到Toast错误。我得到的两个错误是“文件无法打开”和“图像无法编辑”。前者听起来像文件权限问题,我认为应该从grantUriPermissions下面的解决方法中解决。另一个我不知道的错误。Android ACTION_EDIT意图编辑图像

// 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消息并能解决它们吗?

+1

'photoPath'指向哪里?还要注意那些'Intent'标志和那个'grantUriPermission()'循环对于文件是没有用的;那些用于'ContentProvider'的'Uri'值,比如'FileProvider'。另外,'putExtra()'调用是无用的,因为EXTRA_OUTPUT用于ACTION_IMAGE_CAPTURE和ACTION_VIDEO_CAPTURE,而不是ACTION_EDIT Intent.html#ACTION_EDIT)。 – CommonsWare

+0

photoPath是在前面创建的文件上调用.getAbsolutePath()的结果。该文件正由应用程序中的FileProvider管理,为什么我觉得我需要该循环。我可能会误解这一点;我不知道Android文件权限的所有细节。 – BowlingHawk95

回答

0

我想通了这个问题。我使用Uri.parse是错误的,因为我在我的应用程序中使用了FileProvider。交换该行FileProvider.getUriForFile使应用程序按预期工作。