android – 如何使用服务连接的BLE连接在不停止服务或断开连接的情况下跨活动使用?
作者:互联网
我有3个组件.
> Activity1具有用于连接和断开BLE连接的按钮
> Activity2需要从BLE设备获取数据.
>服务所有连接逻辑(如getRemoteDevice(),connectGatt等)属于服务.
Activity1通过绑定服务连接到BLE设备.
Intent gattServiceIntent = new Intent(mContext,BleService.class);//In Activity1 context
bindService(gattServiceIntent, mServiceConnection,BIND_AUTO_CREATE);
按下按钮后立即连接到ble设备.
现在,当我从Activity1移动到Activity2时,我在Activity1中取消绑定服务.
mContext.unbindService(mServiceConnection);//In Activity1 context
现在如何在Activity2中使用现有的BLE设备连接?
我临时解决方案:
我正在通过从Activity2上下文绑定到它的新服务实例移动到Activity2时再次连接BLE设备. (我不想要.)
在Activity2中,我正在检查我的服务是否已经在运行,如果没有运行,那么我再次从Activity2 Context绑定服务.
if(!isMyServiceRunning(BleWrapper.class)){
Intent wrapperServiceIntent = new Intent(mContext,BleWrapper.class);
bindService(wrapperServiceIntent,mBLEWrapperServiceConnection,BIND_AUTO_CREATE);
}else{
Log.w(LOGTAG, "Service already connected. In onCreate");
}
在ServiceConnection回调下触发onServiceConnected()中的连接
@Override
public void onServiceConnected(ComponentName componentName,IBinder service) {
mBluetoothLeService = ((BleWrapper.LocalBinder) service).getService();
if (!mBluetoothLeService.initialize()) {
showAlertDialog(getString(R.string.ble_not_supported_on_this_device));
}else {
mBluetoothLeService = BleWrapper.getInstance();
}
mBluetoothLeService.connect(/*address from shared preference*/); //Reconnecting to the same device using address stored in Shared pref
}
用于检查我的服务是否正在运行
private boolean isMyServiceRunning(Class<?> serviceClass) {
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (serviceClass.getName().equals(service.service.getClassName())) {
return true;
}
}
return false;
}
但是函数isMyServiceRunning()总是返回false.意味着从Activity1移动到Activity2时服务会断开连接
任何解决方案都可以在活动中保持连接设备的连接?
解决方法:
在Service类中创建LocalBinder(扩展Binder).从活动#1开始,您可以启动该服务,并使用bindservice访问binder对象并调用unbindservice以断开与服务的连接.从Activity#2开始,您可以再次调用bindservice来访问binder对象,因为服务仍在运行.这样,您可以始终保持服务运行并访问连接的蓝牙对象.请参阅下面的示例链接.
标签:android,android-service,bluetooth-lowenergy,android-ble 来源: https://codeday.me/bug/20190628/1314285.html