在Android應用程序的主要活動中,我檢查權限(Manifest.permission.MANAGE_DOCUMENTS
),檢測到我沒有它們,並調用requestPermisions
。 然後在onRequestPermissionResult
我幾乎立即得到拒絕的權限,沒有對話框顯示。Android權限自動被拒絕請求MainActivity中的權限
我已經證實在同一應用程序的其他活動相同的權限(通過requestPermissions
再次,它的工作原理),所以我預計將存放在此決定(該會話,或其他),我從來沒有選擇否認許可。無論哪種方式,權限對話框都不顯示,權限被自動拒絕。
到目前爲止,我已經在Android 7和6(API 24和23)的模擬器上測試了這一點。
我曾嘗試:
- 清除應用程序的數據緩存和擦拭設備,所以看到這個onRequestPermissionsResult returns immediately with denied permission後
- 絕對不是這個Getting permission denied on Android M
- 三重檢查拼寫很新鮮,我打電話了超級方法
- 關於堆棧溢出的一堆其他建議
我很爲難......
這裏是許可請求(參見代碼註釋):
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)
}
}
我立即得到結果處理沒有一個對話框顯示出來了問我的權限。我可能會也可能不會確認同一應用程序的另一個(兒童)活動中的相同權限(似乎沒有區別)。
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)
}
}
}
在我的表現,我有以下:
<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"/>
但再怎麼都應該讀的意向選定的文件作爲'intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)' – RecencyEffect
這將是一個完全不同的問題的應用程序。如果您獲得讀取URI權限,則可以調用[openInputStream](https://developer.android.com/reference/android/content/ContentResolver.html#openInputStream(android.net.Uri))來訪問所選文件的內容。 – ianhanniballake
我面臨着與互聯網許可相同的問題......我該如何處理? @ianhanniballake –