于2018年11月14日编辑:
我想简化我的问题,如何从Fragment中获得一个click事件,该Fragment包含一个recycler-view,它具有一个处理click事件的适配器?
我正在使用BLE服务(基于Google BLE示例)的应用程序上工作。我有一个 DeviceScanActivity 能够成功搜索并连接到BLE外围设备,此活动启动了一个新活动 DeviceControlActivity ,并将BLE服务绑定到了它:
@Override
protected void onStart() {
super.onStart();
Log.d(TAG, "onStart: bind Service. " + mServiceConnection);
Intent gattServiceIntent = new Intent(this, BluetoothLeService.class);
bindService(gattServiceIntent, mServiceConnection, BIND_AUTO_CREATE);
}
在此活动中,我能够将值/消息发送到BLE外围设备。
我的应用程序还有另一个活动, ManualModeActivity 。 当我开始此活动时,如果出现 DeviceControlActivity
,我首先取消BLE服务的绑定:@Override
protected void onStop() {
super.onStop();
Log.d(TAG, "onStop: BLE Service is unbind " + mServiceConnection);
unbindService(mServiceConnection);
BLEServiceBonded = false;
}
然后在新启动的活动( ManualModeActivity )中,将BLE服务绑定到它,就像在 DeviceControlActivity 的情况下一样。
现在开始出现问题,或者基本上我是android编程的新手,我不知道接下来该怎么做才能在 ManualModeActivity 中使用BLE服务,我已经搜索了两天,找不到有用的东西。
所以,让我看看我无能为力,或者是什么使我面临挑战。
ManualModeActivity 具有一个带有两个选项卡的ViewPage,我创建了 ManualTabPagerAdapter 来扩展FragmentStatePagerAdapter,在此适配器中,我正在加载片段,例如 ManualDeviceFrament 。该片段具有RecyclerView,RecyclerView中的每个项目都有一个按钮,用于处理列表和按钮单击,我已经创建了 ManualListAdapter 。 现在的挑战是,如果我单击按钮要发送BLE消息,但是BLE服务mBluetoothLeService为空。 我想使用以下命令发送消息:
mBluetoothLeService.writeCustomCharacteristic("Hello");
对于这两种活动,我都有以下代码来处理服务连接:
private final ServiceConnection mServiceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName componentName, IBinder service) {
mBluetoothLeService = ((BluetoothLeService.LocalBinder) service).getService();
if (!mBluetoothLeService.initialize()) {
Log.e(TAG, "Unable to initialize Bluetooth");
finish();
}
mBluetoothLeService.connect(mDeviceAddress);
BLEServiceBonded = true;
}
@Override
public void onServiceDisconnected(ComponentName componentName) {
BLEServiceBonded = false;
}
}
因此,我想请您告诉我一些可能的解决方案,因为我没有找到任何有用的东西,所以我是个新手,所以也许缺少一些基本知识。如果您需要更多详细信息,请告诉我,我将在此处发布。
答案 0 :(得分:-1)
您是否也在ManualModeActivity上绑定并取消了绑定服务? 关于重写onStop方法的另一件事,首先编写重写的代码比先调用父函数更好。 @Override 受保护的void onStop(){ unbindService(mServiceConnection); BLEServiceBonded =假; super.onStop(); Log.d(TAG,“ onStop:BLE服务已解除绑定” + mServiceConnection); }