Android中如何在作用域函数内获取Context调用connectGatt?
在Kotlin的ScanCallback中获取Context的几种解决方法
方法一:使用外部类标签引用
Kotlin里匿名内部类的this默认指向匿名类本身,要获取外部MainActivity的实例,只需用MainActivity@this语法指定外部类的上下文,直接替换代码中的占位部分即可:
it.device.connectGatt(MainActivity@this, false, gattCallback)
方法二:提前保存Context引用
在MainActivity类初始化时,先把当前Activity的上下文存到一个变量里,之后在回调的任何作用域里都能直接用:
class MainActivity : AppCompatActivity() { private val activityContext: Context = this private val scanCallback = object: ScanCallback() { override fun onScanResult(callbackType: Int, result: ScanResult?) { result?.let { // ...其他业务代码 it.device.connectGatt(activityContext, false, gattCallback) } } } }
方法三:使用全局Application上下文
如果你的蓝牙连接逻辑不需要绑定当前Activity的生命周期,可以用applicationContext,还能避免Activity销毁后可能引发的内存泄漏问题:
it.device.connectGatt(applicationContext, false, gattCallback)
内容的提问来源于stack exchange,提问作者Metropol_Tilkisi
相关产品推荐
相关产品推荐

