2016-10-07 8 views
0

を読んギャラリーから選択した画像は私に例外与えるとき、私は、画像を選択し、それをデータベースに保存したい:java.lang.SecurityException:許可拒否:com.android.providers.media.MediaProvider

enter image description here

onSelectFromGalleryResult方法でエラー:

@Override 
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
     switch (requestCode) { 
      case Utility.MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE: 
       if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
        if(userChoosenTask.equals("Take Photo")) 
         cameraIntent(); 
        else if(userChoosenTask.equals("Choose from Library")) 
         galleryIntent(); 
       } else { 
      } 
      break; 
    } 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == Activity.RESULT_OK) { 
     if (requestCode == SELECT_FILE) 
      onSelectFromGalleryResult(data); 
     else if (requestCode == REQUEST_CAMERA) 
      onCaptureImageResult(data); 
    } 
} 
@SuppressWarnings("deprecation") 
private void onSelectFromGalleryResult(Intent data) { 
    Bitmap bm=null; 
    if (data != null) { 


     try { 
    ##  bm = MediaStore.Images.Media.getBitmap(getApplicationContext().getContentResolver(), data.getData());## 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
    ivImage.setImageBitmap(bm); 
}` 

マニフェストファイル

+1

は許可読み取りを追加し、外部を書きますあなたのマニフェストのストレージ....... – sushildlh

答えて

1

アプリケーション上のマニフェストファイルのアクセス権を与えますタグ

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

ユーザーはAndroid 6.0(APIレベル23)から、アプリケーションのインストール時ではなく、アプリケーションの実行中にアプリケーションにアクセス許可を与えます。

以下では、アクセス許可を確認して要求する方法を説明します。ただし、サポートライブラリを使用する方が簡単です。これは、メソッドを呼び出す前に実行中のAndroidのバージョンをアプリが確認する必要がないためです。詳細情報については

、パーミッションをチェックする宣言

にこのOfficial documentationをチェックし、機能の下

private static final int REQUEST_STORAGE_PERMISSIONS = 1; 
private static final String[] STORAGE_PERMISSIONS = { 
     Manifest.permission.READ_EXTERNAL_STORAGE, 
}; 

許可が付与されているかどうかを確認します、

private boolean hasPermissionsGranted(String[] permissions) { 
    for (String permission : permissions) { 
     if (ActivityCompat.checkSelfPermission(getActivity(), permission) 
       != PackageManager.PERMISSION_GRANTED) { 
      return false; 
     } 
    } 
    return true; 
} 

に機能上の使用クリティカルなアクセス許可を必要とするターゲットコードは、ここではそれを行うコードです -

if (!hasPermissionsGranted(STORAGE_PERMISSIONS)) { 
     requestPermissions(); 
     return; 
    } 

、パーミッション要求応答を取り扱い、ここでユーザーから許可を付与するアクセス許可のダイアログをトリガーする実際のコードは、ある今

private void requestPermissions() { 
    if (shouldShowRequestPermissionRationale(STORAGE_PERMISSIONS)) { 
     showPermissionDialog(); // Dialog to describe user how permission is important 
    } else { 
     requestPermissions(STORAGE_PERMISSIONS, REQUEST_STORAGE_PERMISSIONS); 
    } 
} 

@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, 
             @NonNull int[] grantResults) { 
    if (requestCode == REQUEST_STORAGE_PERMISSIONS) { 
     if (grantResults.length == STORAGE_PERMISSIONS.length) { 
      boolean isGranted = true; 
      for (int result : grantResults) { 
       if (result != PackageManager.PERMISSION_GRANTED) { 
        isGranted = false; // You can tell user that critical permission denied 
        break; 
       } 
      } 
      if (isGranted) { // perform that critical operation here... } 
     } else { 
      // Tell user that critical permission denied 
     } 
    } else { 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    } 
} 
+0

私は何もしません、この行の問題bm = MediaStore.Images.Media.getBitmap(getApplicationContext()。getContentResolver()、data.getData()); –

+0

v24をターゲットに設定していますか? – Wizard

+0

あなたの完全なスタックトレースを入れて、私は実際のエラーが何であるかを調べる必要があります。これはAndroid Mと上位バージョンによる許可拒否のようです。 – Wizard

関連する問題