我使用altbeacon库来监控和范围信标。我已经阅读了您的请求权限页面,只是想知道,如果我定位API 23+()的位置权限,则扫描将在API<< 23?我没有真正的设备,因此无法对其进行测试。或者有没有办法不使用API低于23的设备请求位置许可?谢谢你的回答
答案 0 :(得分:0)
在Android 23及更高版本中,您需要检查应用是否已被授予“危险”权限,如果没有请求用户。
Android支持库具有辅助功能。
见Requesting Permissions at Run Time。
主要功能是checkSelfPermission
和requestPermissions
为了避免旧版Android的问题,您可以使用以下内容检查您是否在运行Marshmallow的设备上:
public static boolean isMNC() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;
}
如果您使用的是Marshmallow或更新的设备,则会返回true
,否则为false
。因此,如果返回true
,请检查权限,否则请检查
您也应该在调用@SuppressLint("NewApi")
和checkSelfPermission
的函数上使用注释requestPermissions
。
答案 1 :(得分:0)
重申核心问题:
如果您构建的应用具有 minSdkVersion< 23但是targetSdkVersion> = 23 ,当您尝试扫描蓝牙信标时会发生什么?
简短回答:确实有效。
更长的答案:
不会发生用户权限请求。使用minSdkVersion< 23,编译器将阻止你包含一行代码requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, PERMISSION_REQUEST_COARSE_LOCATION);
,因为它不会在早期的Android版本上运行。如果将它包装在像if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
这样的if语句中,它将不会被执行。如果您添加注释@SuppressLint("NewApi")
,则在尝试执行代码时应用会崩溃。
信标扫描只会在前台和后台运行,而不管用户权限是否未被授予。早期的Android版本无法请求用户的许可,因此应用程序的行为就像它们已被授予一样。