2016-03-06 30 views
0

我有需要現在被認爲「關鍵」,所以我下面我在活動中加入準則HERE的onCreate本科特棉花糖不會顯示許可窗口

private static final int REQUEST_WRITE_CALENDAR = 1453; 
    ... 
boolean hasPermission = (ContextCompat.checkSelfPermission(activity, 
       Manifest.permission.WRITE_CALENDAR) == PackageManager.PERMISSION_GRANTED); 
    if (!hasPermission) { 
     ActivityCompat.requestPermissions(parentActivity, 
        new String[]{Manifest.permission.WRITE_CALENDAR}, 
        REQUEST_WRITE_CALENDAR); 
    } 

但是,這並不表明寫入日曆中的應用任何對話。

此外,似乎我應該也廣告的代碼塊來處理響應

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    switch (requestCode) 
    { 
     case REQUEST_WRITE_STORAGE: { 
      if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) 
      { 
       //reload my activity with permission granted or use the features what required the permission 
      } else 
      { 
       Toast.makeText(parentActivity, "The app was not allowed to write to your calendar.", Toast.LENGTH_LONG).show(); 
      } 
     } 
    } 

} 

Android的SDK目標爲23,是正確的。所以問題的原因與提出的可能重複的問題不同。

+1

什麼是您的'targetSdkVersion'? – CommonsWare

+0

Marsmellow。 Niefs Works建議的方法...我不知道爲什麼官方示例拒絕工作 – AndreaF

+0

'if(!permission_ok)== PackageManager.PERMISSION_GRANTED)){'是錯誤的並且不能編譯 – njzk2

回答

1

確定許可狀態的邏輯可以簡化爲這樣:

if (ContextCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_CALENDAR) != PackageManager.PERMISSION_GRANTED) { 
    ActivityCompat.requestPermissions(parentActivity, 
             new String[]{Manifest.permission.WRITE_EXTERNAL_CALENDAR}, 
             REQUEST_WRITE_CALENDAR); 
} 

Activity沒有實現任何東西,重寫onRequestPermissionsResult就足夠了。

+0

爲什麼有人已經低估了這個答案和我的問題? – AndreaF

+0

我不知道。我已經提出了你的問題。 –

+0

@Niels Masdorp格式化問題的答案,也許? – 2016-03-06 23:12:24

0

到了問題的第二部分:

您可以在活動或在您的片段覆蓋onRequestPermissionsResult。如果您選擇在片段而不是活動中這樣做,則應在活動中添加如下內容(以便將回調傳遞到片段):

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

    for (Fragment frag : getSupportFragmentManager().getFragments()) { 

     if (frag != null) { 
       frag.onRequestPermissionsResult(requestCode, permissions, grantResults); 
     } 
    } 
}