CheckSelfPermission 始终返回 PERMISSION_GRANTED 即使针对 SDK 23

CheckSelfPermission always returning PERMISSION_GRANTED even though targeting SDK 23

我正在尝试实现指纹扫描仪,我首先检查权限以便获得用户权限。

我有以下代码:

int permissionState = ContextCompat.checkSelfPermission(SecurityPicker.this, Manifest.permission.USE_FINGERPRINT);
        Log.d("SecrityPicker", String.valueOf(Build.VERSION.SDK_INT));
        if (ContextCompat.checkSelfPermission(SecurityPicker.this, Manifest.permission.USE_FINGERPRINT)
            == PackageManager.PERMISSION_DENIED)
        {
            ActivityCompat.requestPermissions(SecurityPicker.this, new String[]{Manifest.permission.USE_FINGERPRINT},
                    MY_PERMISSION_USE_FINGERPRINT);
        }
        else
        {
            fingerPrintContainer.setVisibility(View.VISIBLE);
        }

checkSelfPermission 总是返回已授予的权限,即使我没有。我使用的 Android 模拟器 API 23 (Marshmallow).

下面是我的gradle文件

android {
    compileSdkVersion 23
    buildToolsVersion "24.0.0-rc1"

    packagingOptions {
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 33
        versionName "2.0.1.0"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
            debuggable false
        }
    }

    repositories {
        mavenLocal()
    }
}

对于保护级别为危险的权限,您只需检查运行时间权限。

Manifest.permission.USE_FINGERPRINT 的保护级别为普通,可以看出here。因此不需要在 运行 时获得该许可。

对于普通级别的权限,只需在清单中指定即可。这就是您始终获得许可结果的原因。

请参阅 this 了解有关哪些权限是危险的更多详细信息。