2017-04-08 13 views
0

私は、ユーザーが写真を撮ってドローイングし、ソーシャルメディアアプリケーションにアップロードできるアプリを開発しています。私は、私たちの作業負荷を軽減するために、図面用のサードパーティのアプリケーションを使用したいと思います。私はここでこれを行う方法についていくつかの答えを見つけました。そして、次のコードの多くはそれらの答えから取られています。私がさまざまな回答の組み合わせを試してみると、私は常にインテントでトーストのエラーを受け取ります。私が得る2つのエラーは、「ファイルを開くことができませんでした」と「画像を編集できませんでした」です。前者はファイルアクセス権の問題のように聞こえますが、これは下の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() 'ループはファイルにとって無用です。それらは 'FileProvider'のような' ContentProvider'からの 'Uri'値用です。また、 'EXTRA_OUTPUT'は' ACTION_IMAGE_CAPTURE'と 'ACTION_VIDEO_CAPTURE'に使われているので、' putExtra() '呼び出しは役に立たないです、' 'ACTION_EDIT''(https://developer.android.com/reference/android/content/) Intent.html#ACTION_EDIT)。 – CommonsWare

+0

photoPathは、先に作成されたFileで.getAbsolutePath()を呼び出した結果です。そしてファイルはアプリケーションのFileProviderによって管理されています。なぜ私はこのループが必要だと感じていますか?私はそれを間違える可能性があります。私はAndroidファイルのパーミッションの詳細をすべて知っていません。 – BowlingHawk95

答えて

0

私は問題を把握しました。アプリケーションでFileProviderを使用しているため、私のUri.parseの使用は間違っていました。 FileProvider.getUriForFileの行を交換することで、意図したとおりにアプリが動作するようになりました。