定位目标权限 23

Location target permission 23

我正在使用 altbeacon 库来监视和测距信标。我已经阅读了您的请求权限页面,只是想知道,如果我将位置权限定位为 API 23+ (),扫描是否适用于 API < 23 的设备?我没有真正的设备,所以无法测试它。或者有什么方法可以不使用 API 小于 23 的设备请求位置权限?感谢您的回答

在 Android 23 日及以后,您需要检查应用程序是否已被授予 "dangerous" 权限,如果没有,请询​​问用户。
Android 支持库为此提供了辅助函数。
参见 Requesting Permissions at Run Time。 主要函数是checkSelfPermissionrequestPermissions.
为了不让旧版本的 Android 出现问题,您可以使用以下方法检查您是否在 运行 Marshmallow 设备上:

public static boolean isMNC() {     
   return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;
}

如果您使用的是 运行 Marshmallow 或更新的设备,这将 return true,否则 false。所以,如果这个returns true,检查权限,否则不要。
您可能还应该在调用 checkSelfPermissionrequestPermissions.

的函数上使用注释 @SuppressLint("NewApi")

重述核心问题:

如果您构建的应用程序 minSdkVersion < 23 但 targetSdkVersion >= 23当您尝试扫描蓝牙信标时会发生什么?

简答:有效。

更长的答案:

  • 不会发生用户权限请求。 如果 minSdkVersion < 23,编译器将阻止你包含像 [=10 这样的代码行=] 因为它不会 运行 早期 Android 版本。如果你将它包装在像 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) 这样的 if 语句中,它就不会被执行。如果您添加像 @SuppressLint("NewApi") 这样的注释,应用程序将在尝试执行代码时崩溃。

  • 信标扫描将正常工作,无论是在前台还是在后台,不管用户权限是否被授予。较早的 Android 版本无法请求用户的许可,因此该应用程序的行为就像他们已被授予一样。