2017-03-03 27 views
2

BitMapFactory.decodeFileに関する問題があります。BitmapFactory:ストリームをデコードできません:java.io.FileNotFoundException

私のアプリでは、自分のデバイスから画像を選択したり、写真を撮ったりできます。そして、これはここで

ImageViewの

に表示されなければならないコードスニペットです:

Uri selectedImage = data.getData(); 
String[] filePathColumn = {MediaStore.Images.Media.DATA}; 
Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null); 
        cursor.moveToFirst(); 
        int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
        String picturePath = cursor.getString(columnIndex); 
        cursor.close(); 
        MyImage image = new MyImage(); 
        image.setTitle("Test"); 
        image.setDescription("test choose a photo from gallery and add it to " + "list view"); 
        image.setDatetime(System.currentTimeMillis()); 
        image.setPath(picturePath); 

そして、私はこの例外を取得しています:

事前にit.Pleaseヘルプme.Thanksを解決する方法
BitmapFactory: Unable to decode stream: java.io.FileNotFoundException: /storage/emulated/0/WhatsApp/Media/WhatsApp Images/IMG-20170302-WA0012.jpg: open failed: EACCES (Permission denied) 

..

答えて

12

権限の問題は、外部読み取り記憶装置のマニフェストに権限を追加してから使用できるようにした後で、6.0以上のosを使用している場合は使用する必要があります簡単な許可。書き込みに

:読むために

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

:6.0以上

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

private String[] galleryPermissions = {Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}; 

if (EasyPermissions.hasPermissions(this, galleryPermissions)) { 
      pickImageFromGallery(); 
     } else { 
      EasyPermissions.requestPermissions(this, "Access for storage", 
        101, galleryPermissions); 
     } 

あなたはREAD-EXTERNALのための実行時に許可を求める必要があり感謝

+2

クラスまたはフィールドの場合、このEasyPermissionsは何ですか? – Monali

+3

そのライブラリをコンパイル 'pub.devrel:easypermissions:0.2.1' –

+0

ありがとうたくさん..あなたは私の一日を節約.. – Monali

0

yを起動するとストレージ当社CAMERAの意図:

final int MyVersion = Build.VERSION.SDK_INT; 
     if (MyVersion > Build.VERSION_CODES.LOLLIPOP_MR1) { 
      if (!checkIfAlreadyhavePermission()) { 
       ActivityCompat.requestPermissions(new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE}, 1); 
      } else { 
       startYourCameraIntent(); 
      } 
     } 

checkIfAlreadyhavePermission()メソッド:

@Override 
     public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { 
      super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
     switch (requestCode) { 
      case 1: { 
       if (grantResults.length > 0 
         && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
        startYourCameraIntent(); 

       } else { 
        Toast.makeText(getActivity(), "Please give your permission.", Toast.LENGTH_LONG).show(); 
       } 
       break; 
      } 
     } 
    } 

をそして、これを追加します。)(onRequestPermissionにボタンアクションを "拒否" "許可" と

private boolean checkIfAlreadyhavePermission() { 
     int result = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE); 
     return result == PackageManager.PERMISSION_GRANTED; 
    } 

ハンドル許可]ダイアログマニフェストのアプリケーションタグに:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
関連する問題