我getBluetoothService() called with no BluetoothManagerCallback
在我的 Android 应用程序中经常遇到错误。
我不知道是什么导致了这个或任何关于蓝牙管理器回调的事情。谁能给我一个关于可能导致此问题的原因或从哪里开始寻找的好主意。
通过阅读 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 行
当同时打开多个蓝牙套接字时,这似乎会被调用。我通过确保一次只打开 1 个插槽来解决此问题。
即使我的应用程序已关闭并且我无法以任何可能的方式摆脱它,我也会收到此错误。在这种情况开始发生后,我需要硬重启我的手机,因为我什至无法打开蓝牙。
现在(使用相同的代码)它只发生在我的一部手机上。也许这是驱动程序的问题。
我在收到 BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED 状态为 BluetoothHeadset.STATE_CONNECTED 后直接尝试 BluetoothSocket.connect() 后收到此消息。BluetoothSocket.connect() 也失败了。在尝试 BluetoothSocket.connect() 之前添加 500 毫秒的超时后,这解决了我实际连接的问题。消息“在没有 BluetoothManagerCallback 的情况下调用 getBluetoothService()”仍然存在,但一切正常。
如果 BluetoothServerSocket 当前不接受具有您尝试连接的相同 UUID 的 [bluetoothServerSocket.accept()],也会出现这种情况。
如果您确定您接受服务器套接字,请仔细检查您是否没有提供太短的超时(我之前已将其设置为 200 以检查某些内容,哎呀)。
没有 BluetoothManagerCallback 调用 getBluetoothService()
我也面临同样的问题。但我解决了。在我的情况下,已经有一个套接字处于打开状态,我正在尝试打开另一个套接字。因此,我们尝试作为客户端一次打开多个套接字。我觉得这就是原因