Android权限:在用户按下“后执行任务”;允许;

Android权限:在用户按下“后执行任务”;允许;,android,android-permissions,Android,Android Permissions,我想知道,当用户按下“允许”按钮访问联系人详细信息/日历访问等时,我们是否有办法识别事件 我知道有一种方法可以通过ActivityCompat.requestPermissions请求权限,但有没有一种方法可以在用户授予权限后立即执行操作?调用requestPermissions()请求权限。您可以在onRequestPermissionsResult()中找到结果,并可以确定他们是否授予了该权限。从应用程序代码的角度来看,这是“紧接着”。首先定义变量: public static int MY

我想知道,当用户按下“允许”按钮访问联系人详细信息/日历访问等时,我们是否有办法识别事件


我知道有一种方法可以通过ActivityCompat.requestPermissions请求权限,但有没有一种方法可以在用户授予权限后立即执行操作?

调用
requestPermissions()
请求权限。您可以在onRequestPermissionsResult()中找到结果,并可以确定他们是否授予了该权限。从应用程序代码的角度来看,这是“紧接着”。首先定义变量:

public static int MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION = 1;
使用以下命令请求权限:

if (ActivityCompat.checkSelfPermission(this,
        android.Manifest.permission.ACCESS_FINE_LOCATION)
        != PackageManager.PERMISSION_GRANTED) {
    // Should we show an explanation?
    if (ActivityCompat.shouldShowRequestPermissionRationale(this,
            android.Manifest.permission.ACCESS_FINE_LOCATION)) {
        // Show an explanation to the user *asynchronously* -- don't block
        // this thread waiting for the user's response! After the user
        // sees the explanation, try again to request the permission.
    } else {
        // No explanation needed, we can request the permission.
        ActivityCompat.requestPermissions(this,
                new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION);
        // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
        // app-defined int constant. The callback method gets the
        // result of the request.
    }
}
现在使用以下方法获取结果:

     @Override
public void onRequestPermissionsResult(int requestCode,
        String permissions[], int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION : {
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0
                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                // permission was granted, yay! Do the
                // contacts-related task you need to do.
                Toast.makeText(getApplicationContext(), "Permission granted", Toast.LENGTH_SHORT).show();

            } else {

                // permission denied, boo! Disable the
                // functionality that depends on this permission.
                Toast.makeText(getApplicationContext(), "Permission denied", Toast.LENGTH_SHORT).show();
            }
            return;
        }

        // other 'case' lines to check for other
        // permissions this app might request
    }
}
用于片段

如果在
片段中尝试此代码,请更改

checkSelfPermission()

ActivityCompact.checkSelfPermission()

也会改变

ActivityCompat.requestPermissions()

requestPermissions()

权限结果(允许或拒绝)的处理与活动相同


有关更完整的示例,请参见此

我使用此代码就是为了这个目的

   public boolean isPermissionGranted() {

    if (Build.VERSION.SDK_INT >= 23) {
        if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
                == PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
                == PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.CAMERA)
                == PackageManager.PERMISSION_GRANTED) {
            Log.v(TAG, "Permission is granted");
            return true;
        } else {
            ActivityCompat.requestPermissions(this, new String[]{
                    Manifest.permission.CAMERA
            }, 1);
            return false;
        }
    } else { //permission is automatically granted on sdk<23 upon installation
        Log.v(TAG, "Permission is granted");
        return true;
    }

}

对回调函数onRequestPermissionsResult(..)
它返回提示结果,可用于执行任何进一步的代码。谢谢@rafsanahmad007这是我正在寻找的卸载和清理构建apk…确保在清单中添加权限…对于低于marsmallow的android版本,权限对话框将不会显示。如果grantResults[0]已经==PackageManager.PERMISSION_grantResults.length>0,显然,条件验证不是多余的吗?ActivityCompact应该是ActivityCompat。它只有1个字符,所以我无法提交编辑。它正在不断地破坏我的应用程序
    if(isPermissionGranted())
    {
       // do your stuff
    }