BLE ScanCallback在不同Android SDK版本下的兼容性问题
daojo 2017-09-21 01:29:27 安卓蓝牙4.0在5.0以后用ScanCallback,在之前用LeScanCallback。我现在是在app初始化的时候就注册了一个service,在OnServiceConnected的时候开始搜索蓝牙。
本来我是直接在这个service里面,直接声明了一个成员变量private ScanCallback mScanCallback = new ScanCallback(){。。。},在变量里override onScanResult这个函数,进行设备名称判断。现在兼容性问题来了,编译没问题,一旦真机运行,在5.0以下的手机中运行的时候,就会碰到NoClassDefFoundError。为了解决这个问题,我增加了版本判断,把这个mScanCallback 变量放到了一个函数里面,public void scanLeDevice(final boolean enable) {
ScanCallback mScanCallback = new ScanCallback() {
。。。
}
}
但因为我不断在各种情况下开启scan或者停止scan,不停调用scanLeDevice等于不停new这个变量,结果导致很多空指针问题,而之前并没有。
碰到这种局面,各位有没有好的解决方案?