如何将数据从 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
上的方法以将设备传递给服务实现。
我正在开发一个应用程序来启动蓝牙设备应用程序。
我有一项名为 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
上的方法以将设备传递给服务实现。