2017-06-05 69 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

相關問題