отредактировано 14.11.2018:
Я хотел бы упростить свой вопрос, как я могу получить событие щелчка в действии от фрагмента, который содержит представление переработчика и имеет адаптер, который обрабатывает событие щелчка?
Приложение выглядит следующим образом:
Я работаю над приложением, которое использует службу 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 .
Когда я запускаю это действие, я сначала отменяю привязку службы BLE в случае DeviceControlActivity :
@Override
protected void onStop() {
super.onStop();
Log.d(TAG, "onStop: BLE Service is unbind " + mServiceConnection);
unbindService(mServiceConnection);
BLEServiceBonded = false;
}
Затем во вновь запущенном действии ( ManualModeActivity ) я привязываю к нему службу BLE, как это делается в случае DeviceControlActivity .
И теперь начинается проблема, или, по сути, я новичок в программировании Android, и я не знаю, что мне делать дальше, чтобы использовать службу BLE в ManualModeActivity , я ищу два дня, ничего полезное найдено.
Итак, давайте посмотрим, что я не могу сделать или что создает для меня вызов.
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;
}
}
Итак, ребята, я хотел бы попросить вас рассказать мне о некоторых возможных решениях, потому что я не нашел ничего полезного, я новичок, поэтому, возможно, некоторые базовые знания отсутствуют. Если вам нужна дополнительная информация, просто дайте мне знать, и я опубликую это здесь.