默认情况下授予权限

时间:2017-03-16 08:34:01

标签: android permissions android-manifest android-5.0-lollipop runtime-permissions

我不确定我是否完全理解这一点。因此,对于< = 21 API版本,我们可以使用AndroidManifest.xml来请求权限,但是Lollipop和更高版本的API具有Requesting permission on runtime功能。所以我正在使用这个简单的代码:

if (Build.VERSION.SDK_INT >= 23) {
    mPermissionsToBeAsked.clear();
    for (String permission : AudioRecordingThread.PERMISSIONS_NEEDED) {
        if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {
            mPermissionsToBeAsked.add(permission);
        }
    } ....

然后,如果该列表不为空,我正在请求它们:

if (mPermissionsToBeAsked.size() > 0) {
   requestPermissions(mPermissionsToBeAsked.toArray(new String[0]), AUDIO_PERMISSIONS_REQUEST_CODE);
}

但是,出于某种原因,在设备上,例如,像Android 6.0.1的三星Galaxy S7,安装应用时默认授予的所有权限。所以我想知道为什么,但是,有更大的关注,当我在应用程序管理器中转到我的应用程序并且手动删除麦克风permision时,在应用程序中checkSelfPermission(permission)仍然返回GRANTED 。所以问题:

  1. 为什么在具有API级别Lollipop及更高版本的设备上,默认情况下仍会授予所有权限,而上述代码不会向mPersmissionToBeAsked添加任何内容?
  2. 为什么我在应用程序管理器checkSelfPermission(android.permission.RECORD_AUDIO) 中手动删除标题MICROPHONE的权限仍然会返回GRANTED

2 个答案:

答案 0 :(得分:2)

只需在你的app gradle文件中验证targetsdk版本是否大于22。

 defaultConfig {
        // -----
        targetSdkVersion 23
       //----
    }

如果小于23,则会自动授予您的应用权限。

答案 1 :(得分:1)

首先,它处理权限授予的Android M及以上版本。这意味着你应该

targetSdkVersion 23 

或以上。否则,系统会认为开发人员没有针对此版本,这意味着开发人员不会检查权限。