我有一个Android M应用程序(targetSDK = 23),它需要位置权限。当用户在Moto X Play(纯版)设备上授予此权限时,app +系统每次都会请求权限,即使用户已授予权限。我可以看到在App Info中授予此权限,系统提示出现之前和之后都是用户接受的。系统的行为应该是这样的,即它一次向用户询问一次授权,而不是随后(当然,除非许可被撤销)。这适用于运行6.0.1的Nexus 6P和5X。
users
答案 0 :(得分:2)
您的Moto X Play是运行6.0还是6.0.1?看起来它可能是他们在6.0.1中修补的系统错误之一,因为运行这个M的最新更新的两个设备似乎都能正常工作。我确认它可以在我的nexus 6p和5x上运行。
如果您没有使用ContextCompat.checkSelfPermission()检查您是否已拥有该权限,则会导致重复请求相同的权限。根据此处的文档:http://developer.android.com/training/permissions/requesting.html
“用户只需为每个权限组授予一次权限。如果您的应用程序请求该组中的任何其他权限(在应用程序清单中列出),系统会自动授予它们。当您请求权限时,系统调用onRequestPermissionsResult()回调方法并传递PERMISSION_GRANTED,就像用户通过系统对话框明确授予您的请求一样。“
系统可能会自动授予对权限的访问权限,如上面6.0.1中所述,但会在6.0中明确向用户显示相同的对话框(依赖开发人员在请求之前使用checkSelfPermission)。