Galeriden bir resim seçip bir ImageView
kaynağı olarak ayarlayacağınız bir resim seçici yazmaya çalışıyorum. Bunu yapmak için aşağıda verilen kodu kullanıyorum ama galeride bir resim seçebilir ve uygulama Fragment
döner sonra hatayı alıyorum:Galeriden görüntü seçin - EACCESS İzin reddedildi
Fragment:
İşteI/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
kodudur. Manifest'te
@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;
}
java
, eğer doğru uygulama cihazın depolama<manifest>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application>
....
</application>
</manifest>
ulaşabilmesi gerektiğini belirtti ettik
Sorun ne olabilir? Herhangi bir yardım takdir edilir. Teşekkür ederiz!
https://stackoverflow.com değiştirmek bu izni gerek/questions/32635704/android-izni-doesnt-work-bile-if-i-have-declared-it Bunun ötesinde, kodunuz çalışmaz veya çıkarılabilir depolama birimindeki resimler ve ana uygulama iş parçacığı üzerinde disk G/Ç yapıyorsunuz. Lütfen [bir resim yükleme kitaplığı] (http://android-arsenal.com/tag/46) 'yı kullanarak, onActivityResult() 'da aldığınız' Uri'yi kullanın. Seçtiğiniz kütüphane (ör. Picasso) [içeriği 'Uri'den doğru bir şekilde tüketmekle] ilgilenmelidir (https://commonsware.com/blog/2016/03/15/how-consume-content-uri.html). – CommonsWare