繁体   English   中英

默认情况下授予权限

[英]Permissions are granted by default

我不确定我是否完全理解这一点。 因此,对于<= 21 API版本,我们只能使用AndroidManifest.xml来请求权限,但是Lollipop和更高版本的API我们具有“运行时请求权限”功能。 所以我用这个simpe代码:

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的Samsung Galaxy S7), 默认情况下,在安装app时所有权限均被取消 所以我想知道为什么,但是,当我在“应用程序管理器”中转到我的应用程序并手动删除“麦克风checkSelfPermission(permission) ,在应用程序中checkSelfPermission(permission)仍返回GRANTED ,这是一个更大的问题。 所以问题是:

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

Just Cross在您的应用gradle文件中验证targetdk版本是否大于22。

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

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

首先是处理权限授予的Android M及更高版本。 那意味着你应该有

targetSdkVersion 23 

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM