0

我无法继续访问 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 中的两个活动之间传递一个对象实例

4

0 回答 0