You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 13:35:19