Android 安卓6.0don';不要请求许可

Android 安卓6.0don';不要请求许可,android,android-6.0-marshmallow,Android,Android 6.0 Marshmallow,我一直在关注android开发者教程和视频,但在手机上测试后,它不会询问权限,知道吗 我已经将代码放在ONCREATE中,并添加了所需的函数。 Android Studio执行时没有任何问题 int REQUEST_READ_PHONE; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layou

我一直在关注android开发者教程和视频,但在手机上测试后,它不会询问权限,知道吗

我已经将代码放在ONCREATE中,并添加了所需的函数。 Android Studio执行时没有任何问题

int REQUEST_READ_PHONE;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ...

    //PERMISSION CHECK
    if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) {
        //CHECK IF SERVICE IS RUNNING
        executeService();

        if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.READ_PHONE_STATE)) {
            Toast.makeText(MainActivity.this, "Permission REQUIRED to work properly", Toast.LENGTH_LONG).show();
        }

        //REQUEST PERMISSION
        ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_PHONE_STATE}, REQUEST_READ_PHONE);
    }

}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {

    if (requestCode == REQUEST_READ_PHONE){

            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                //PERMISSION GRANTED
                executeService();
            } else {
                //PERMISSION DENIED permission denied
                Toast.makeText(MainActivity.this, "Application will not work properly", Toast.LENGTH_LONG).show();
            }
    } else {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }
}

private void executeService() {
    //DO STUFF HERE
}
做两件事

1) 检查目标Sdk版本是否设置为23

2) 更改这段代码

ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED

做两件事

1) 检查目标Sdk版本是否设置为23

2) 更改这段代码

ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED

你的逻辑是错误的:

试试这个:

if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) {
    executeService();
} else {

    if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.READ_PHONE_STATE)) {
    Toast.makeText(MainActivity.this, "Permission REQUIRED to work properly", Toast.LENGTH_LONG).show();
    }

    //REQUEST PERMISSION
    ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_PHONE_STATE}, REQUEST_READ_PHONE);

}
此外,您只能在运行Android 6.0的设备上看到权限对话框。

您的逻辑错误:

试试这个:

if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) {
    executeService();
} else {

    if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.READ_PHONE_STATE)) {
    Toast.makeText(MainActivity.this, "Permission REQUIRED to work properly", Toast.LENGTH_LONG).show();
    }

    //REQUEST PERMISSION
    ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_PHONE_STATE}, REQUEST_READ_PHONE);

}

此外,您只能在运行Android 6.0的设备上看到“权限”对话框。

只有在已经授予权限的情况下,您才请求权限。。。如果在未授予权限的情况下应该调用first If语句,只需将其更改为“!=PackageManager.permission_grated”您仅在已授予权限的情况下请求权限。。。如果第一个If语句应该在未授予权限的情况下调用,只需将其更改为“!=PackageManager.permission\u grated”是的,这就是我要说的。干得好@DeanWildYup这就是我要说的。干得好@DeanWild