如何识别GRANTED和UNACCEPTED权限?

时间:2018-01-13 06:27:47

标签: java android permissions runtime-permissions

我使用此代码识别onCreate中的权限:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
     requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE}, 100);

在活动中,我使用此代码段来检查,允许或拒绝权限:

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
  switch (requestCode) {
     case 100: {
         if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
             Toast.makeText(getApplicationContext(), "Ok", Toast.LENGTH_SHORT).show();
         else
             Toast.makeText(getApplicationContext(), "No", Toast.LENGTH_SHORT).show();
     }
  }
}

并在Manifest.xml中:

<!-- *****  Uses Permission  ***** -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>

但它总是在代码中返回零值,无论是在验证时还是在它被拒绝时。

如何判断用户是否已经验证或拒绝?

1 个答案:

答案 0 :(得分:0)

我试过你的例子,它给出了0和-1的正确结果。 0表示授予 -1表示拒绝

可能是设备问题而且不使用模拟器,否则你的代码工作得很好。 这是我的快照:

01-13 13:00:29.134 30051-30051/com.usense.netsense I/get_permission:  permissions[0]= android.permission.READ_PHONE_STATE grantResults[0]= 0
01-13 13:00:29.134 30051-30051/com.usense.netsense I/get_permission:  permissions[1]= android.permission.WRITE_EXTERNAL_STORAGE grantResults[1]= -1
01-13 13:00:29.134 30051-30051/com.usense.netsense I/get_permission:  permissions[2]= android.permission.READ_EXTERNAL_STORAGE grantResults[2]= -1