【问题标题】:Permissions are granted by default默认情况下授予权限
【发布时间】:2017-08-07 07:42:06
【问题描述】:

我不确定我是否完全理解这一点。因此,对于 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,在安装应用程序时默认授予所有权限。所以我想知道为什么,但是,当我在应用程序管理器中转到我的应用程序并手动删除麦克风权限时,在应用程序中 checkSelfPermission(permission) 仍然返回 GRANTED。所以问题:

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

【问题讨论】:

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


    【解决方案1】:

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

    targetSdkVersion 23 
    

    或以上。否则系统认为开发者没有针对这个版本,这意味着开发者没有检查权限。

    【讨论】:

      【解决方案2】:

      只需在您的应用 gradle 文件中交叉验证 targetsdk 版本是否大于 22。

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

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

      【讨论】:

        猜你喜欢
        • 2012-02-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-09
        • 2020-10-14
        • 2013-12-05
        相关资源
        最近更新 更多