2015-10-14 15 views
9

デバイスギャラリーに画像を追加するためにMediaScannerConnectionを使用してscanFileメソッドを呼び出します。許可が否定されてAndroid 6でMediaScannerConnectionが失敗する

E/DatabaseUtils:java.lang.SecurityException:許可拒否: 読みcom.android.providers.media.MediaProvider URI 内容://メディアしかし、Androidの6に私はそれを実行し、この例外を受け取りますPID = 22984から/外部/ fs_id、UID = 10078は android.permission.READ_EXTERNAL_STORAGE、またはgrantUriPermissionを(必要)

E/iu.UploadsManager:java.lang.SecurityExceptio N:許可拒否: 読み取りcom.android.providers.media.MediaProvider URI コンテンツ:

PID = 22984から//メディア/外部/ fs_id、UID = 10078は android.permission.READ_EXTERNAL_STORAGEが必要、またはgrantUriPermission()

助けが必要ですか?

+0

私は同じ問題に直面しています。 Youtubeに動画をアップロードしようとしていますが、同じエラーが発生しました。解決策を見つけましたか? – TOP

+0

私はWhatsAppで写真を撮ると、チャットでLogCatで同じエラーが発生することに気付きました。だから、これは新しいランタイムのアクセス許可のため、Android 6の問題です。 –

+0

フラグIntent.FLAG_GRANT_READ_URI_PERMISSIONを追加しようとしましたが、うまくいかないようです。 – TOP

答えて

0

これは、アクセス許可を処理する新しい方法の結果です。あなたのアプリケーションは、今は実行時の許可を求めて、却下の準備ができている必要があります。

あなたのonCreateで

(あるいはどこ)あなたがチェックし、おそらく許可を求める:

  if (ContextCompat.checkSelfPermission(this, 
      Manifest.permission.READ_EXTERNAL_STORAGE) 
      != PackageManager.PERMISSION_GRANTED) { 

     // Should we show an explanation? 
     if (ActivityCompat.shouldShowRequestPermissionRationale(this, 
       Manifest.permission.READ_EXTERNAL_STORAGE)) { 

      // Show an expanation to the user *asynchronously* -- don't block 
      // this thread waiting for the user's response! After the user 
      // sees the explanation, try again to request the permission. 

     } else { 

      // No explanation needed, we can request the permission. 

      ActivityCompat.requestPermissions(this, 
        new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 
        MY_PERMISSIONS_REQUEST_READ_MEDIA); 

      // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an 
      // app-defined int constant. The callback method gets the 
      // result of the request. 
     } 
    } 

次に、このような権限を受け入れる準備ができている:

@Override 
public void onRequestPermissionsResult(int requestCode, 
             String permissions[], int[] grantResults) { 
    switch (requestCode) { 
     case MY_PERMISSIONS_REQUEST_READ_MEDIA: { 
      // If request is cancelled, the result arrays are empty. 
      if (grantResults.length > 0 
        && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
      } else { 
       // permission denied, boo! Disable the 
       // functionality that depends on this permission. 
      } 
      return; 
     } 
    } 
} 
+0

Nop。あなたが見るように、例外は私のアプリではなく、DatabaseUtilsとUploadsManagerによってスローされます。また、API 23をターゲットにしていないため、ランタイムアクセス権は私のアプリには影響しません。 –

+0

回答はまだ問題と関連しており、同様の問題に遭遇している他の人には役に立ちます。私はdownvoteを削除するためにupvotedしています。アプリ内のすべてのイベントを一度カバーする権限を設定する方法はありますか?アプリがどこでプレミアムを要求する必要があるかを把握する必要はありませんか? – Theo

関連する問題