如何将数据从 Android 服务发送到它的 AIDL 存根

How to send data from Android Service to its AIDL stub

我正在开发一个应用程序来启动蓝牙设备应用程序。

我有一项名为 MyService 的服务。 我有存根 MyServiceImpl 来处理将从外部调用的 AIDL 接口。 我有广播接收器来获取“ACTION_BOND_STATE_CHANGED”。

我的要求是每当设备连接时(即 device?.bondState == BluetoothDevice.BOND_BONDED,我需要将设备信息从广播接收器发送到 MyServiceImpl 存根。 Reason - AIDL 接口已经在那里处理,一旦 aidl 被调用,新的 class 将从那里创建。为此,需要新的 class MyServiceImpl。此外,通过回调发送对接口调用的响应也在那里处理。

代码如下。有人可以帮我将设备信息从 Broadcastreceiver 发送到服务存根实现吗?

class MyService : Service() {

    override fun onBind(intent: Intent): IBinder {
        return binder
    }

    override fun onUnbind(intent: Intent?): Boolean {
        return super.onUnbind(intent)
    }

    override fun onCreate() {
       binder = MyServiceImpl()
       filterNewDevices()
    }

    private fun filterNewDevices() {
        val filter = IntentFilter()
        filter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED)
        registerReceiver(mBroadcastReceiverBond, filter)
    }

    private val mBroadcastReceiverBond: BroadcastReceiver = object : BroadcastReceiver() {

        override fun onReceive(context: Context?, intent: Intent) {
            if (intent.action == BluetoothDevice.ACTION_BOND_STATE_CHANGED) {
                val device = intent.getParcelableExtra<BluetoothDevice>(BluetoothDevice.EXTRA_DEVICE)

                if (device?.bondState == BluetoothDevice.BOND_BONDED) {
                    //HERE I NEED TO SEND THE device TO 
                }

                if (device?.bondState == BluetoothDevice.BOND_BONDING) {
                }

                if (device?.bondState == BluetoothDevice.BOND_NONE) {
                }
            }
        }
    }

    class MyServiceImpl : IBluetoothConnection.Stub(), IBinder {

        private lateinit var  btConnection: BTConnection

        override fun registerUuid(name : String?, uuid : String?, connectionId : Int, btDevice : BluetoothDevice?) {
                btConnection = BTConnection(this)
                btConnection.initialize(name!!, UUID.fromString(uuid), connectionId, btDevice)
            }
    }
}

MyServiceImpl 中创建一个将设备作为参数的方法。在您的 BroadcastReceiver 中调用 binder 上的方法以将设备传递给服务实现。