将蓝牙配对对话带到前面

时间:2014-10-01 14:24:47

标签: android bluetooth

我是一个配对蓝牙设备的简单服务,它看起来像这样:

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();
}

它的工作原理非常好,除非有时会弹出对话框,有时它会显示在我的通知栏中,我必须手动打开它。有没有办法确保它总是弹到前面?

我已经尝试谷歌了,我唯一能找到的是,如果你保持蓝牙设置,它总会弹出,但这似乎是一个丑陋的解决方案。所有这一切的原因是我正在使用自动化,并希望确保当我运行我的服务时,我得到配对对话可以点击"配对"。

2 个答案:

答案 0 :(得分:7)

我遇到了同样的问题。我发现这篇文章解释了对话框何时显示:Bluetooth pairing request on notification bar?

恢复,它取决于shouldShowDialogInForeground()方法的结果。

从帖子中引用:

  

... 有很多方法可以显示对话框:

     
      
  1. 如果设备最近处于可发现模式
  2.   
  3. 如果设备最近发现
  4.   
  5. 如果最近在设备选择器中挑选了设备
  6.   
  7. 如果可以看到蓝牙设置
  8.   

在我强制显示对话框的情况下,我在尝试配对之前启动并取消了发现...

代码/黑客

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();