2016-04-12 19 views
0

ギャラリーから画像を選択し、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> 
にアクセスする必要があると述べました

何が問題なのでしょうか?どんな助けもありがとうございます。 ありがとうございました!

+1

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

答えて

3

getPathFromCameraData()を廃止し、

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

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

素晴らしい解決策!今はうまくいく。 –

2

あなたはギャラリーから画像を選んでいる場合 - あなたは

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

このアクセス許可を追加しましたが、エラーは解決しません。 –

関連する問題