代码之家  ›  专栏  ›  技术社区  ›  Bolt UIX

为什么android Ibeacon需要蓝牙权限?

  •  0
  • Bolt UIX  · 技术社区  · 4 年前

    我正在使用android( 组织。altbeacon:android beacon库:2.19.3 )库提供与信标交互的API

    它具有所需的位置和;蓝牙权限。

    权限要求:

    https://altbeacon.github.io/android-beacon-library/requesting_permission.html

    IOS的ibeacon不需要蓝牙权限,为什么android ibeacon需要蓝牙权限?

    android Ibeacon是否有其他库

    1 回复  |  直到 4 年前
        1
  •  2
  •   davidgyoung    4 年前

    是的,Android需要蓝牙权限来扫描蓝牙信标,但iOS不需要同样的权限来检测iBeacon。 无论您使用哪个库,Android都需要有蓝牙权限来扫描信标。 这是操作系统平台的限制。

    enter image description here

    Android需要此权限而iOS不需要此权限的原因是基于这两个平台的发展历史。以下几点:

    • 从iOS 7开始,蓝牙信标支持被添加到CoreLocation API中,该API使用 地方 权限,而不是对GPS、WiFi、蜂窝无线电和蓝牙等各种传感器的单独权限,所有这些都可以用于定位目的。 苹果公司显然做出了一个设计决定,将所有传感器置于一个单一的许可之下。

    • 开源Android根本没有用于检测信标的内置API——它只有蓝牙API。(Beacon API由Google Play Services附加组件或开源Android Beacon库提供)。所以 当Android 4.3中添加蓝牙LE扫描时,它被视为必须在蓝牙权限之后的东西,这是有道理的。 。这些API碰巧与苹果的iBeacon发明配合使用,但这些API不是为定位而设计的。

    • 当Android在Android 6中添加运行时权限时,它试图通过将位置权限设置为运行时权限来保护用户的隐私,此外,除了蓝牙权限之外,它还将蓝牙扫描置于相同的位置权限之后,以保护隐私。

    • 在iOS上,蓝牙LE API确实需要蓝牙权限,并且 Apple沙盒了蓝牙功能 来自iBeacon。这样,检测iBeacon必须获得位置权限,而不需要蓝牙权限。另一方面,通过常规蓝牙许可,非iBeacon检测是可能的,但苹果会过滤掉任何与iBeacon匹配的数据包。 Android没有等效的沙盒,这也是两种权限都是必需的原因之一。

    需要注意的一点是:苹果不需要蓝牙许可就可以检测信标,这只适用于iBeacon格式。如果您试图检测AltBeacon或Eddystone,您实际上需要蓝牙权限(而不是这些格式的位置权限)这是一个“漏洞”,有助于在某些情况下避免iOS设备上的额外权限。

    最后一点注意:从Android 12开始,您可以使用新的BLUETOOTH\u扫描权限 相反 的位置权限。这个想法是为了让Android不再需要位置许可来扫描常规蓝牙设备。但有一个大问题:要使用这个新权限,必须在AndroidManifest中声明。你的应用程序不使用蓝牙进行定位(例如信标),Android表示,在这种情况下,它会过滤掉一些扫描结果。他们没有明确表示,但这可能意味着他们将过滤掉任何与已知信标格式(如iBeacon、AltBeacon或Eddystone)匹配的蓝牙数据包。

        2
  •  1
  •   Nisa Efendioglu    4 年前

    Android端的工作逻辑与ios端的工作逻辑不同。在Android方面,我们需要获得与用户相关的每个操作的权限。这是谷歌的政策之一。为该位置开发了不同的库,但您需要以相同的方式添加权限。例如,可用于定位的另一个包: https://github.com/mrmans0n/smart-location-lib 或全部: https://android-arsenal.com/tag/55