我是一个配对蓝牙设备的简单服务,它看起来像这样:
protected void onHandleIntent(Intent intent) {
Bundle extras = intent.getExtras();
if(!extras.containsKey("bluetoothAddress"))
return;
String bluetoothAddress = extras.getString("bluetoothAddress");
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
if(!adapter.isEnabled()) {
adapter.enable();
}
BluetoothDevice device = adapter.getRemoteDevice(bluetoothAddress);
device.createBond();
}
它的工作原理非常好,除非有时会弹出对话框,有时它会显示在我的通知栏中,我必须手动打开它。有没有办法确保它总是弹到前面?
我已经尝试谷歌了,我唯一能找到的是,如果你保持蓝牙设置,它总会弹出,但这似乎是一个丑陋的解决方案。所有这一切的原因是我正在使用自动化,并希望确保当我运行我的服务时,我得到配对对话可以点击"配对"。
答案 0 :(得分:7)
我遇到了同样的问题。我发现这篇文章解释了对话框何时显示:Bluetooth pairing request on notification bar?
恢复,它取决于shouldShowDialogInForeground()方法的结果。
从帖子中引用:
... 有很多方法可以显示对话框:
- 如果设备最近处于可发现模式
- 如果设备最近发现
- 如果最近在设备选择器中挑选了设备
- 如果可以看到蓝牙设置
醇>
在我强制显示对话框的情况下,我在尝试配对之前启动并取消了发现...
代码/黑客
BluetoothAdapter.getDefaultAdapter().startDiscovery();
//Give it some time before cancelling the discovery
Thread.sleep(1000);
BluetoothAdapter.getDefaultAdapter().cancelDiscovery();
//Then do the LeScan and connect to the device
PS :我知道这是一个可怕的黑客攻击,但这是我开展工作的唯一方法,配对必须只对设备进行一次,所以不是这样可怕......而且,如果有人找到更好的方式,我可以接受建议
答案 1 :(得分:0)
我使用以下代码解决了问题
if(!BluetoothAdapter.getDefaultAdapter().isDiscovering())
BluetoothAdapter.getDefaultAdapter().startDiscovery();
//make sure that the device is in discovering
while (!BluetoothAdapter.getDefaultAdapter().isDiscovering());
BluetoothAdapter.getDefaultAdapter().cancelDiscovery();