位置目标许可23

时间:2016-09-30 12:01:19

标签: android ibeacon ibeacon-android

我使用altbeacon库来监控和范围信标。我已经阅读了您的请求权限页面,只是想知道,如果我定位API 23+()的位置权限,则扫描将在API<< 23?我没有真正的设备,因此无法对其进行测试。或者有没有办法不使用API​​低于23的设备请求位置许可?谢谢你的回答

2 个答案:

答案 0 :(得分:0)

在Android 23及更高版本中,您需要检查应用是否已被授予“危险”权限,如果没有请求用户。
Android支持库具有辅助功能。
Requesting Permissions at Run Time。 主要功能是checkSelfPermissionrequestPermissions 为了避免旧版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版本无法请求用户的许可,因此应用程序的行为就像它们已被授予一样。