0

我不确定我完全理解这一点。因此,对于< = 21 API版本,我们可以使用AndroidManifest.xml来请求权限,但是棒棒糖和更高API我们有Requesting permission on runtime功能。所以我在使用本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的三星Galaxy S7,安装应用程序时预设的所有权限为。所以我想知道为什么,但是,它有一个更大的关注,当我去应用程序管理器中的应用程序和手动删除麦克风permision,在应用程序checkSelfPermission(permission)仍然返回授予。所以问题:

  1. 为什么与API级别棒棒糖和设备更高的所有权限仍然默认与上面的代码授予不会添加任何东西到mPersmissionToBeAsked
  2. 为什么如果我手动删除应用程序管理器中的标题MICROPHONE的权限checkSelfPermission(android.permission.RECORD_AUDIO)仍然返回GRANTED

回答

1

刚刚越过验证您的应用程序文件的gradle的targetsdk版本大于22

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

如果小于23比权限将自动被授予您的应用程序。

1

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

targetSdkVersion 23 

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