代码之家  ›  专栏  ›  技术社区  ›  Mārtiņš Ciekurs

用户权限检查仅在安装后第一次起作用

  •  0
  • Mārtiņš Ciekurs  · 技术社区  · 7 年前

    我的应用程序仅在安装应用程序后第一次显示权限对话框。如果我关闭它并再次打开,它不会显示请求窗口。即使我在clickEvent上手动禁用位置权限或请求权限窗口,它也不起作用。

    检查权限:

    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)
        }
    }
    

    onrequestpermissions结果:

    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
            }
        }
    }
    

    我打电话给 checkPermission 功能开启 onStart 当我点击图标。

    3 回复  |  直到 7 年前
        1
  •  3
  •   Manohar    7 年前

    你离开了 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)
        }
    }
    

    你没有正确处理拒绝和不再询问案件,我建议你使用 this 简单的图书馆。你会在一个地方接到所有的回电

      Permissions.check(this, Manifest.permission.ACCESS_COARSE_LOCATION, null, new PermissionHandler() {
        @Override
        public void onGranted() {
            // do your task.
        }
    });
    
        2
  •  0
  •   Umesh Maharjan    7 年前
        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
    }
    
        3
  •  -1
  •   Mohammad Rbabah    7 年前

    当用户接受您的权限时,它将永久接受您的权限(除非用户将其删除),只有在尚未授予该权限时,“检查权限”才会显示。当用户通过设置清除数据或取消选中权限时->应用设置->所选应用->权限。