【问题标题】:How to send data from Android Service to its AIDL stub如何将数据从 Android 服务发送到其 AIDL 存根
【发布时间】:2021-10-25 19:44:53
【问题描述】:

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

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

我的要求是每当连接设备时(即device?.bondState == BluetoothDevice.BOND_BONDED,我需要将设备信息从广播接收器发送到MyServiceImpl 存根。 Reason - AIDL 接口已经在那里处理,一旦调用了aidl,就会从那里创建新的类。对于那个新类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 中创建一个以device 为参数的方法。在您的BroadcastReceiver 中调用binder 上的方法以将设备传递给服务实现。
  • 谢谢@DavidWasser - 它有效
  • 超级。我创建了一个答案。如果答案对您有用,您可以通过单击答案旁边的绿色复选标记来接受答案。这也将从开放问题列表中删除此问题。很高兴您能够解决问题。

标签: android bluetooth broadcastreceiver android-service android-broadcast


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    相关资源
    最近更新 更多