Android M 6.0权限问题
我有一个Android M应用程序(targetSDK=23),它需要位置权限。当用户在Moto X Play(纯版)设备上授予此权限时,app+系统每次都会请求权限,即使用户已授予权限。我可以在App Info中看到授予的此权限,无论是在系统提示出现之前还是之后,并且用户接受。系统的行为应该是这样的:它向用户请求一次授权,而不是随后(当然,除非权限被撤销)。这在运行6.0.1的Nexus 6P和5X上都能正常工作Android M 6.0权限问题,android,android-6.0-marshmallow,android-permissions,Android,Android 6.0 Marshmallow,Android Permissions,我有一个Android M应用程序(targetSDK=23),它需要位置权限。当用户在Moto X Play(纯版)设备上授予此权限时,app+系统每次都会请求权限,即使用户已授予权限。我可以在App Info中看到授予的此权限,无论是在系统提示出现之前还是之后,并且用户接受。系统的行为应该是这样的:它向用户请求一次授权,而不是随后(当然,除非权限被撤销)。这在运行6.0.1的Nexus 6P和5X上都能正常工作 if(askForPermissions && act != n
if(askForPermissions && act != null) {
String[] permissionsToRequest = _getPermissions(set);
ActivityCompat.requestPermissions(act, permissionsToRequest, GENERIC_SVC_PERM_REQUEST);
}else{
startSmartServices();
}
你的Moto X Play是运行6.0还是6.0.1?这似乎是他们在6.0.1中修补的系统缺陷之一,因为运行最新M更新的两台设备似乎都能正常工作。我验证了它在我的nexus 6p和5x上也能正常工作 如果不使用ContextCompat.checkSelfPermission()检查您是否已经拥有该权限,则这将导致重复请求相同的权限。根据此处的文件: “用户只需为每个权限组授予一次权限。如果您的应用程序请求该组中的任何其他权限(在应用程序清单中列出),系统将自动授予这些权限。当您请求权限时,系统将调用您的onRequestPermissionsResult()回调方法并传递已授予的权限,与用户通过系统对话框显式授予您的请求的方式相同。”
可能是系统自动授予访问权限,如6.0.1中所述,但会在6.0中显式向用户显示相同的对话框(依赖于开发人员在请求之前使用checkSelfPermission)。请将代码发布在您调用的位置
checkSelfPermission()
并使用该结果控制是否应调用requestPermissions()
。在调用requestPermissions()
之前,您似乎没有调用checkSelfPermission()
查看您是否拥有该权限requestPermissions()
始终请求您列出的所有权限,即使是已授予的权限。My Moto X Play Pure Edition运行的是Android 6.0。