[英]User permission check only works first time after installation
我的應用程序僅在安裝應用程序后第一次才顯示權限對話框。 如果我關閉它並再次打開,它不會顯示請求窗口。 即使我在clickEvent上手動禁用了位置權限或請求權限窗口,它也不起作用。
的checkPermission:
private fun checkPermission(){
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
//permission not granted
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.ACCESS_COARSE_LOCATION)) {
//show an explanation to the user
} else {
//request the permission
ActivityCompat.requestPermissions(this,
arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION),
ACCESS_COARSE_LOCATION_CODE)
}
} else {
ActivityCompat.requestPermissions(this,
arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION),
ACCESS_COARSE_LOCATION_CODE)
}
}
onRequestPermissionsResult:
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
when(requestCode){
ACCESS_COARSE_LOCATION_CODE -> {
if ((grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
//granted
} else {
//denied
}
return
}
}
}
我在onStart
和單擊圖標時調用checkPermission
函數。
您shouldShowRequestPermissionRationale
部分留空,以便第二次不請求權限。 在其中顯示一個警告對話框,為什么您需要權限,以及當用戶單擊“確定”時再次詢問權限。 或者,您可以直接再次請求權限。
private fun checkPermission(){
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
//permission not granted
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.ACCESS_COARSE_LOCATION)) {
ActivityCompat.requestPermissions(this,
arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION),
ACCESS_COARSE_LOCATION_CODE)
} else {
//request the permission
ActivityCompat.requestPermissions(this,
arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION),
ACCESS_COARSE_LOCATION_CODE)
}
} else {
ActivityCompat.requestPermissions(this,
arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION),
ACCESS_COARSE_LOCATION_CODE)
}
}
您沒有處理拒絕操作,不要再次詢問情況,為簡單起見,建議您使用此庫。 您將在單個位置獲得所有回電
Permissions.check(this, Manifest.permission.ACCESS_COARSE_LOCATION, null, new PermissionHandler() {
@Override
public void onGranted() {
// do your task.
}
});
private fun checkAndRequestPermissions(): Boolean {
val permissionContact = ContextCompat.checkSelfPermission(activity,
Manifest.permission.READ_CONTACTS)
val permissionPhoneState = ContextCompat.checkSelfPermission(activity,
Manifest.permission.READ_PHONE_STATE)
val permissionCamera = ContextCompat.checkSelfPermission(activity,
Manifest.permission.CAMERA)
val permissionWriteExternal = ContextCompat.checkSelfPermission(activity,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
val locationPermission = ContextCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_FINE_LOCATION)
val listPermissionsNeeded = java.util.ArrayList<String>()
when {
locationPermission != PackageManager.PERMISSION_GRANTED -> listPermissionsNeeded.add(Manifest.permission.ACCESS_FINE_LOCATION)
}
when {
permissionContact != PackageManager.PERMISSION_GRANTED -> listPermissionsNeeded.add(Manifest.permission.READ_CONTACTS)
}
when {
permissionPhoneState != PackageManager.PERMISSION_GRANTED -> listPermissionsNeeded.add(Manifest.permission.READ_PHONE_STATE)
}
when {
permissionCamera != PackageManager.PERMISSION_GRANTED -> listPermissionsNeeded.add(Manifest.permission.CAMERA)
}
when {
permissionWriteExternal != PackageManager.PERMISSION_GRANTED -> listPermissionsNeeded.add(Manifest.permission.WRITE_EXTERNAL_STORAGE)
}
when {
!listPermissionsNeeded.isEmpty() -> ActivityCompat.requestPermissions(activity, listPermissionsNeeded.toTypedArray(), REQUEST_ID_MULTIPLE_PERMISSIONS)
}
return true
}
當用戶接受您的許可時,它將永久接受(除非用戶將其刪除),檢查許可僅在尚未授予許可時顯示。 當用戶清除數據或通過設置->應用程序設置->選擇的應用程序->權限取消選中權限時。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.