5

目前,我有以下方法AppCompatActivity檢查運行許可棉花糖:ContextCompat.checkSelfPermission的用例是什麼?

if(Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) { 
    boolean hasPermission = checkSelfPermission(Manifest.permission.XX) 
       == PackageManager.PERMISSION_GRANTED; 
    if(!hasPermission) { 
     if(shouldShowRequestPermissionRationale(Manifest.permission.XX)) { 
      // explain reason for permission, try again 

     } else { 
      // user deny with "don't show again" 
     } 
    } 
} 

到目前爲止,我覺得它的工作原理相當不錯的棉花糖。但是,如果我擔心前M版本的權限,我應該使用ContextCompat.checkSelfPermission()而不是?我知道前M中的權限可以通過使用Xposed或類似的框架進行修改,這是否意味着ContextCompat.checkSelfPermission()能夠充分檢測由於Xposed等引起的權限拒絕?

+0

其他有用的信息[這裏](https://inthecheesefactory.com/blog/things-you-need-to-know-about-android-m-permission-developer-edition/en) –

回答

2

根據權限阻止程序的實現(例如,通過Xposed),應用程序被提供了假數據,或者應用程序的進程將被撤銷權限。

您將無法檢測到應用程序是否獲取了假數據,但在這種情況下,您的應用程序至少不會崩潰。

如果權限在進程級別上被吊銷,則ContextCompat.checkSelfPermission()即使在前M上也能夠檢測到它,並返回PERMISSION_DENIED。請注意,如果您使用ContextCompat方法,則還必須使用ActivityCompat.shouldShowRequestPermissionRationale()ActivityCompat.requestPermissions()方法或其FragmentCompat版本。

查看更多詳情:Support library methods for handling permissions

+1

那麼,我們應該哪一個使用? – Zapnologica

+0

嘿,對不起!我不明白。過程級別? 「甚至在前M並返回PERMISSION_DENIED」,你是什麼意思?前M有權限嗎? – Wizard