ギャラリーから画像を選択し、ImageView
のソースとして設定する画像ピッカーを作成しようとしています。私はこれを行うには下記のコードを使用していますが、私はギャラリーで画像を選択して、アプリがFragment
に戻った後、私はエラーを取得する:ギャラリーから選択画像 - EACCESS許可が拒否されました
フラグメント:
ここI/PICTURE: Path: /storage/emulated/0/DCIM/Camera/IMG_20160409_130537213.jpg
E/BitmapFactory: Unable to decode stream: java.io.FileNotFoundException: /storage/emulated/0/DCIM/Camera/IMG_20160409_130537213.jpg: open failed: EACCES (Permission denied)
I/System.out: resolveUri failed on bad bitmap uri: /storage/emulated/0/DCIM/Camera/IMG_20160409_130537213.jpg
はコードです。 Javaのマニフェストで
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_account, container, false);
........
........
profile_img.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, SELECT_PICTURE);
//SELECT_PICTURE = 1; defined in the fragment class
}
});
//The onActivityResult method
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == SELECT_PICTURE
&& resultCode == Activity.RESULT_OK) {
String path = getPathFromCameraData(data, this.getActivity());
Log.i("PICTURE", "Path: " + path);
if (path != null) {
profile_img.setImageURI(Uri.parse(path));
}
}
}
//The string used to get the file(image) location
public static String getPathFromCameraData(Intent data, Context context) {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = context.getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
return picturePath;
}
は、私は正確にアプリがデバイスのストレージ
<manifest>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application>
....
</application>
</manifest>
にアクセスする必要があると述べました
何が問題なのでしょうか?どんな助けもありがとうございます。 ありがとうございました!
https://stackoverflow.comを変更するには、この許可が必要です/ questions/32635704/android-permission-doesnt-work-even-if-i-have-declared-itそれを超えると、あなたのコードは動作しません。またはイメージをリムーバブルストレージに格納し、メインのアプリケーションスレッドでディスクI/Oを実行している場合。 onActivityResult()で取得した 'Uri'を渡して[image-loading library](http://android-arsenal.com/tag/46)を使ってください。選択した図書館(Picassoなど)は、[Uriのコンテンツを適切に消費する](https://commonsware.com/blog/2016/03/15/how-consume-content-uri.html)を処理する必要があります。 – CommonsWare