2017-06-05 109 views
1

我试图测试特定于Android sdk> 23的运行时权限。但是我的应用程序被自动授予权限而不询问。Android授予我的应用程序运行时权限,而不询问

注意:我正在使用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 
     } 
    } 
} 

当我点击Calendar Button,该onCalendarClick()方法运行,但不要求任何许可,应用程序直接显示日历权限授予!toast。在应用程序的设置中,虽然有正在显示没有权限授予/请求

我错过了什么或者做错了什么?谢谢你的帮助。

+0

你问如果requestCode是日历,但无法若真的授予,你应该在许可[]和grantResults []值检查知道它是否被授予。 –

+0

如果我没有错,那么我认为在'onRequestPermissionsResult(...)'方法中有'if条件'检查权限是否被授予。 @JonathanAste – Robin

+0

你的'targetSdkVersion'是什么? – CommonsWare

回答

2

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

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

AndroidManifest.xml,应用程序请求的权限和它的最后工作。 欲了解更多信息:Android M permission dialog not showing .Thanks所有帮助我出去)

0

您错过了代码的顺序。检查:

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

有一点点差别,你如果你知道你正在谈论日历权限甚至在授予权限要求。因此,您应该首先检查当前的权限响应是否是您想要的权限响应,然后检查权限是否被授予。

来源:https://developer.android.com/training/permissions/requesting.html

+0

它不工作....但谢谢! – Robin

相关问题