在 android 中,蓝牙适配器是使用getDefaultAdapter()
call 访问的,但是 WifiManager 和 Connectivity Manager 是使用getSystemService(Context.WIFI_SERVICE)
and访问的getSystemService(Context.CONNECTIVITY_SERVICE)
。为什么android人会这样区分蓝牙访问。有什么原因吗?
2 回答
要获取代表本地蓝牙适配器的 BluetoothAdapter,
在 JELLY_BEAN_MR1 及以下运行时,调用静态getDefaultAdapter()
方法;
在 JELLY_BEAN_MR2 及更高版本上运行时,getSystemService(String)
使用BLUETOOTH_SERVICE
.
我将尝试按照我的理解从逻辑上解释它。据我了解,蓝牙适配器是适配器,而连接管理器和 WIFI 是管理器。
笼统地说,我们称适配器就像一个连接无法直接连接的设备的设备。经理是控制实体活动的人(这里分别是 WIFI 和 Connection)。如果您在 android 文档中看到Bluetooh Adapter的定义,它会说:
It lets you perform fundamental Bluetooth tasks, such as initiate device discovery, query a list of bonded (paired) devices, instantiate a BluetoothDevice using a known MAC address, and create a BluetoothServerSocket to listen for connection requests from other devices.
因此,它充当您的应用程序/UI 和蓝牙之间的桥梁(适配器),为您提供数据。现在getDefaultAdapter()函数适用Bluetooth Adapter
于 Connectivity Manager 或 WIFI,但不适用于 Connectivity Manager 或 WIFI,因为 Android 目前仅支持一个蓝牙适配器(您可以从链接中阅读)。所以只获取默认的本地适配器是有意义的。这可能是蓝牙适配器出现getDefaultAdapter 的原因:
现在,如果您看到Connectivity Manager类,文档会说:
The class answers queries about the state of network connectivity. It also notifies applications when network connectivity changes.
对于WifiManager类,文档说:
The class provides the primary API for managing all aspects of Wi-Fi connectivity
因此,连接管理器管理网络连接的所有方面,而 Wifi 管理器管理 Wi-Fi 连接的所有方面。它们不是像蓝牙适配器那样充当桥接器的适配器。当我们谈论两个不同的事情时,这可能是实现不同的原因。
我希望这可以帮助你。