使用BluetoothManager和getAdapter()

Ida*_*anB 4 android bluetooth kotlin android-studio android-bluetooth

我正在 Kotlin 中开发 Android 应用程序,我正在尝试在我的应用程序中获取用于蓝牙通信的蓝牙适配器。

我已阅读此文档:设置蓝牙

如图所示,我需要编写以下代码来获取适配器:

val bluetoothAdapter: BluetoothAdapter? = BluetoothAdapter.getDefaultAdapter()
if (bluetoothAdapter == null) {
  // Device doesn't support Bluetooth
}
Run Code Online (Sandbox Code Playgroud)

当我在 Android Studio 中编写此内容时,我收到以下警告:

'getDefaultAdapter(): BluetoothAdapter!' is deprecated. Deprecated in Java
...
Deprecated: this method will continue to work, but developers are 
strongly encouraged to migrate to using BluetoothManager.getAdapter(), since that 
approach enables support for Context.createAttributionContext.
Run Code Online (Sandbox Code Playgroud)

我尝试使用像这样的新推荐方式

var bluetoothManager = (BluetoothManager)(Context.getSystemService(Context.BLUETOOTH_SERVICE))
var adapter = bluetoothManager.getAdapter()
Run Code Online (Sandbox Code Playgroud)

我在代码中收到此错误:

Unresolved reference: getSystemService
Run Code Online (Sandbox Code Playgroud)

我尝试了多种方法来实现它 - 没有任何效果。

我很乐意得到一些帮助。

请指教。

谢谢

Ion*_*gru 6

如果您支持较旧的 API,您应该使用ContextCompat.getSystemService(this, BluetoothManager::class.java)(wherethisContext从中检索服务。之后您就可以访问BluetoothAdapter.

我创建了一个扩展函数,用于获取适配器:

fun Context.bluetoothAdapter(): BluetoothAdapter? =
    ContextCompat.getSystemService(this, BluetoothManager::class.java).adapter
Run Code Online (Sandbox Code Playgroud)

如果您的目标是更高的 API(23 以上),您可以安全地直接使用 Context:

fun Context.bluetoothAdapter(): BluetoothAdapter? = 
    (this.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager).adapter
Run Code Online (Sandbox Code Playgroud)