簡體   English   中英

用戶權限檢查僅在安裝后第一次生效

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM