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