getbluetoothservice() вызывается без вызова bluetoothmanager
Я получаю getBluetoothService() called with no BluetoothManagerCallback
как ошибка часто в моем приложении для Android.
Я понятия не имею, что вызывает это или что-нибудь о обратных вызовах менеджера Bluetooth. Может кто-нибудь дать мне хорошее представление о том, что может быть причиной этой проблемы или с чего начать поиск.
6 ответов
Читая исходный код Android, вы увидите предупреждение, с которым ничего не поделаешь. Исходный код показывает, что если вы звоните
BluetoothSocket#connect();
Потом позвонит
BluetoothAdapter.getDefaultAdapter().getBluetoothService(null);
Ключ здесь - это нулевой параметр, который он передает в строке выше. Из-за этого обратного вызова не будет, и тогда класс BluetoothSocket выдаст предупреждение.
Поскольку это всего лишь предупреждение, я не думаю, что вам нужно что-то делать с этим.
https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/bluetooth/BluetoothSocket.java строка 306 https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/bluetooth/BluetoothAdapter.java строка 1610
Похоже, что это вызывается, когда несколько разъемов Bluetooth открыты одновременно. Я исправил это, убедившись, что открывал только 1 сокет за раз.
Я получаю эту ошибку даже после того, как мое приложение было закрыто, и я не могу избавиться от него любым возможным способом. После того, как это начало происходить, мне нужно перезагрузить телефон, потому что я больше не могу даже включить Bluetooth.
Прямо сейчас (с тем же кодом) это происходит только на одном из моих телефонов.. возможно, это проблема драйверов.
Я получил это сообщение после попытки BluetoothSocket.connect() сразу после получения BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED с состоянием BluetoothHeadset.STATE_CONNECTED. BluetoothSocket.connect() также не удалось. После добавления времени ожидания 500 мс перед попыткой BluetoothSocket.connect() это решило мою проблему с фактическим подключением. Сообщение "getBluetoothService() вызывается без BluetoothManagerCallback" все еще остается, но все работает.
Это также происходит, если BluetoothServerSocket в настоящее время не принимает [bluetoothServerSocket.accept()] с тем же UUID, который вы пытаетесь подключить.
Если вы уверены, что принимаете с серверным сокетом, дважды проверьте, что вы не предоставили слишком короткий тайм-аут (я предварительно установил его на 200, чтобы что-то проверить, к сожалению).
getBluetoothService() вызывается без BluetoothManagerCallback
Я тоже сталкиваюсь с той же проблемой. Но я решил. В моем случае уже один сокет находится в открытом состоянии, и я пытаюсь открыть другой сокет. Поэтому мы пытаемся открыть более одного сокета одновременно как клиент. Я чувствовал, что это причина