Я переписываю приложение, чтобы разделить службу bluetooth между двумя действиями.Ранее я только что решил проблему, выполнив инициализацию службы bluetooth как общедоступного объекта в начальном действии (где служба настроена и из которой запускаются другие действия), а затем вызвав .read () и .write () функции государственной службы от новой деятельности.Это прекрасно работает для записи, но это немного обременительно для чтения (я должен запускать поток каждый раз, когда ожидаю возвращения данных, сидеть и ждать данных).Я перенес все свои другие проекты, чтобы выполнять определенные действия, выполняемые из обработчика службы Bluetooth, когда служба считывает определенные ключевые данные (например, обновлять температуру в пользовательском интерфейсе при получении закодированных данных о температуре).Чтобы иметь возможность более элегантного чтения с обоими действиями, я добавил новую функцию в свой сервис Bluetooth:
/**
* Change the handler (route handler info to new activity). */
public synchronized void newHandler(Handler handle) {
mHandler = handle;
}
Затем вызовите эту функцию, чтобы переназначить новый обработчик из нового действия, когда новое действиезапускается (например, «StartingActivity.mBTService.newHandler (NewActivityHandler);»). Конечно, при возврате обратно в StartingActivity необходимо соответствующим образом переназначить обработчик; -)
К моему удивлению, он работает безвсе накладные расходы на то, чтобы сделать службу Bluetooth единичным, разлагаемым объектом или глобальной службой через приложение (ни одно из которых я не смог успешно закодировать).
Я собираюсь провести более тщательное тестирование,но, надеюсь, это кому-нибудь поможет (когда я что-то верну, я многому научился у этого сообщества)!