2016-10-07 16 views
5

Androidアプリケーションの主要なアクティビティでは、アクセス許可(Manifest.permission.MANAGE_DOCUMENTS)を確認していません。それらを持っていないことを検出し、requestPermisionsに電話してください。 次に、onRequestPermissionResultで、すぐにダイアログが表示されることなく、私はすぐに許可を拒否されます。MainActivityのrequestPermissionから自動的にAndroidのアクセス許可が拒否されました

私はすでにので、私は(セッションのために、または何でも)、この決定が保存されると予想され、私が選択したことがない、(作品再びrequestPermissionsを通じて、)同じアプリの別のアクティビティで同じ権限を確認しました許可を拒否するどちらの方法でも、権限ダイアログは表示されず、権限は自動的に拒否されます。

これまでAndroid 7と6(API 24と23)のエミュレータでこれをテストしました。

私はかなり困惑...ここ

は、許可要求(コード内のコメントを参照してください):

private fun askForPermissionOrSendRequest(view: View, permission: String) { 
    if (checkSelfPermission(permission) == PackageManager.PERMISSION_DENIED) { 
     if (shouldShowRequestPermissionRationale(permission)) { 
      cachedView = view 
      val explanationDialog = AlertDialog.Builder(this).setMessage("We need permissions to read your storage in order to show your profile image.").setOnDismissListener { 
       requestPermissions(
         arrayOf(permission), 
         BSMainActivity.permissionRequestSendProfilePic 
       ) 
      }.create() 
      explanationDialog.show() 

     } else { 
      cachedView = view 
      // this branch is always hit - the permission seems to be missing every time 
      requestPermissions(
        arrayOf(permission), 
        BSMainActivity.permissionRequestSendProfilePic 
      ) 
     } 
    } else { 
     sendRequest(view) 
    } 
} 

私はすぐにアクセス権のために私に尋ねるまでを示すダイアログずに結果ハンドラを取得します。私は同じアプリの別の(子供の)活動で同じ許可を確認しているかもしれないし、そうでないかもしれない(違いはないようだ)。

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="me.monomon.bs"> 

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

答えて

4

のみdangerous permissionsは、実行時に要求されたとMANAGE_DOCUMENTSは危険なアクセス許可ではありませんすることができます。私のマニフェストに

override fun onRequestPermissionsResult(requestCode: Int, 
             permissions: Array<String>, 
             grantResults: IntArray 
) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults) 

    when (requestCode) { 
     BSMainActivity.permissionRequestSendProfilePic -> { 
      // This gets hit, MANAGE_DOCUMENTS was denied 
      if (permissions.contains(Manifest.permission.MANAGE_DOCUMENTS) && grantResults[permissions.indexOf(Manifest.permission.MANAGE_DOCUMENTS)] == PackageManager.PERMISSION_DENIED) { 
       Log.w(logName, "Permission to open image was denied while sending a tag request: %s %s".format(
         permissions.joinToString(",", "[", "]"), 
         grantResults.joinToString(",", "[", "]") 
       )) 
      } 

      // send request regardless of the result for now 
      sendRequest(cachedView) 
     } 
    } 
} 

私は、次があります。この許可は、唯一のプラットフォームの文書管理アプリによって要求されるべき

MANAGE_DOCUMENTS documentationあたりのよう

。この権限はサードパーティ製のアプリケーションには付与できません。

+0

しかし、その後のアプリは全く別の問題だろう 'intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)' – RecencyEffect

+1

のように意図から選択したファイルを読み込むことになっていますか。 URIの読み取りアクセス権が与えられている場合は、[openInputStream](https://developer.android.com/reference/android/content/ContentResolver.html#openInputStream(android.net.Uri))を呼び出してアクセスできます選択されたファイルの内容 – ianhanniballake

+0

私はインターネットの許可と同じ問題に直面しています...どうすればそれを処理できますか? @ianhanniballake –

関連する問題