我无法继续访问 var mBleWrapper: BleWrapper?= null 在其他活动中。有一个名为 BleWrapperUiCallbacks 的预定义 Java 接口,我怀疑它包含我需要的功能和 Java-Class BleWrapper。
我尝试了 Kotlin 伴生对象,它替代了 Java 单例,但我必须将初始化的 BleWrapper 设置为伴生对象,这实际上是不可能的,因为 BleWrapper 是如此实例化:
class BLEActivity : AppCompatActivity() {
companion object {
var mBleWrapper: BleWrapper? = null
//Do something to instantiate the BleWrapper and return the instantiated BleWrapper
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.ble_layout)
initializeBLEWrapper()
val ble_on = findViewById<FloatingActionButton>(R.id.ble_on)
ble_on.setOnClickListener {
val intent = Intent(this, MainActivity::class.java)
startActivity(intent)
gatt = mBleWrapper?.getGatt()!!
c = gatt.getService(NORDIC_UART).getCharacteristic(NORDIC_UART_TX)
val testVal = "a"
val bytes = testVal.toByteArray()
mBleWrapper?.writeDataToCharacteristic(c, bytes)
}
}
private fun initializeBLEWrapper() {
mBleWrapper = BleWrapper(this, object : BleWrapperUiCallbacks.Null() {
override fun uiDeviceFound(
device: BluetoothDevice,
rssi: Int,
record: ByteArray) {
if (device.getName() != null) {
if (device.getName().equals("Adafruit Bluefruit LE") == true) {
var status = mBleWrapper!!.connect(device.getAddress().toString())
if (status == false) {
Log.d("DEBUG", "uiDeviceFound: Connection problem!")
} else {
Log.d("DEBUG", "Connected")
ble_on.isClickable = true
}
}
}
}
}
}
而这个“this”指的是当前的活动。这就是Java中关于Singleton的解决方案?!如果没有这个实例化,BleWrapper 当然总是空的。在空洞时间与 ble 设备的连接。这是 logcat: BluetoothGatt: readRssi() 我需要调用的服务也显示在 logcat 中......
有人能帮我吗?我有点绝望。我还发现了这个:在 Kotlin 中的两个活动之间传递一个对象实例