2016-04-12 24 views
0

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:

İşte
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 

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!

+1

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

cevap

3

getPathFromCameraData() bir kenara bırakın ve

profile_img.setImageURI(Uri.parse(path)); 

için

profile_img.setImageURI(data.getData()); 
+0

Harika bir çözüm! Şimdi iyi çalışıyor. –

2

galeriden görüntüyü aldığımız bilgiler ise -

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
+0

Bu izni ekledim, ancak hata devam ediyor. –

İlgili konular