Java Android无需请求即可授予我的应用程序运行时权限

Java Android无需请求即可授予我的应用程序运行时权限,java,android,permissions,runtime-permissions,Java,Android,Permissions,Runtime Permissions,我正在测试Android sdk>23的运行时权限。但我的应用程序会自动被授予权限,无需询问 注意:我使用的是sdk版本24。下面是我正在使用的一段代码: public void onCalendarClick(View view) { if(ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_CALENDAR) == PackageManager .PERMISSION_DENIED

我正在测试Android sdk>23的运行时权限。但我的应用程序会自动被授予权限,无需询问

注意:我使用的是sdk版本24。下面是我正在使用的一段代码:

public void onCalendarClick(View view) {
    if(ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_CALENDAR) == PackageManager
            .PERMISSION_DENIED) {
       if(ActivityCompat.shouldShowRequestPermissionRationale(this,Manifest.permission.WRITE_CALENDAR)) {
            //Display Explanation to the user
            //For granting permissions to the app.
        }
        else {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_CALENDAR}, CALLBACK_CALENDAR);
        }
    }
}

@Override
public void onRequestPermissionsResult(int resultCode, String permission[], int grantResults[]) {
    if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
        Toast toast;
        switch (resultCode) {
            case CALLBACK_CALENDAR : toast = Toast.makeText(this,"Calendar Permission Granted!!",Toast.LENGTH_LONG);
                toast.show(); break;
            //Other Cases
        }
    }
}
当我点击
日历按钮时,
onCalendarClick()
方法运行,但不要求任何权限,应用程序直接显示已授予的日历权限
吐司
。在应用程序的设置中,尽管未显示授予/请求的权限


我是错过了什么,还是做错了?谢谢您的帮助。

您缺少代码的顺序。选中此项:

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

                // permission was granted, yay! Do the
                // calendar-related task you need to do.

            } else {

                // permission denied, boo! Disable the
                // functionality that depends on this permission.
            }
            return;
        }

        // other 'case' lines to check for other
        // permissions this app might request
    }
}
有一点不同,您甚至在知道您在谈论日历权限之前就询问是否授予了该权限。因此,您应该首先检查当前的权限响应是否是您想要的,然后检查权限是否被授予


来源:

就是这样。我发现,对于android
sdk>22
,虽然运行时权限是通过编程方式为应用程序添加的,但您仍然需要
AndroidManifest.xml
文件中声明应用程序的权限。因此,在添加代码之后:

<uses-permission android:name="android.permission.WRITE_CALENDAR"/>

AndroidManifest.xml
中,应用程序请求权限,并最终开始工作。 有关更多信息:
。感谢所有人的帮助)

您询问的是requestCode是否为日历,而不是它是否真的被授予,您应该检查permission[]和grantResults[]值以了解其是否被授予。如果我没有错,我认为在方法
onRequestPermissionsResult(…)
存在一个
if条件
检查权限是否被授予@Jonathanaste什么是你的
targetSdkVersion
?它是
sdkversion24
@commonwarety,正在对应用程序进行全面卸载和重新安装。也许在之前的测试中,您授予了许可。