Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android M 6.0权限问题_Android_Android 6.0 Marshmallow_Android Permissions - Fatal编程技术网

Android M 6.0权限问题

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

我有一个Android M应用程序(targetSDK=23),它需要位置权限。当用户在Moto X Play(纯版)设备上授予此权限时,app+系统每次都会请求权限,即使用户已授予权限。我可以在App Info中看到授予的此权限,无论是在系统提示出现之前还是之后,并且用户接受。系统的行为应该是这样的:它向用户请求一次授权,而不是随后(当然,除非权限被撤销)。这在运行6.0.1的Nexus 6P和5X上都能正常工作

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。