2014-10-01 50 views
5

我有一個簡單的服務配對的藍牙設備,它看起來像這樣:帶藍牙配對對話前

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

這工作完全正常,只是有時對對話彈出,有時出現在我的通知欄中,我必須手動打開它。有什麼辦法可以確保它始終彈到最前面?

我已經嘗試過谷歌,我只能發現,如果你留在藍牙設置,它總是彈出,但這似乎是一個醜陋的解決方案。所有這一切的原因是我正在使用自動化,並希望確保當我運行我的服務時,我會得到對話框,只需點擊「配對」即可。

回答

5

我有同樣的問題。我發現這篇文章解釋了何時顯示對話框:Bluetooth pairing request on notification bar?

恢復,它取決於shouldShowDialogInForeground()方法的結果。

從帖子引用:

... 有使對話框顯示的方式:

  1. 如果設備在發現模式最近
  2. 如果設備是最近發現
  3. 如果最近在設備選取器中選取設備
  4. 如果藍牙設置爲可見

在我的情況下,迫使對話框出現,我開始並試圖對之前取消的發現......

代碼/哈克

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:我知道這是一個可怕的黑客攻擊,但這是我得到這個工作的唯一方法,並且配對必須只對設備完成一次,所以它並不那麼可怕......此外,如果有人發現更好的方式,我願意提供建議

+0

當您用較短的掃描時間嘗試它時遇到問題嗎? – 2016-10-14 11:52:49

+1

在某些情況下,當我縮短掃描時間時,黑客無法正常工作(當睡眠時間大約半秒鐘時間,黑客有時失敗),我認爲這是因爲Android操作系統安排掃描但未管理以掃描... – 2016-10-17 07:32:34

+1

可能會實現更好的東西可能會捕捉髮現意圖或某事,但我認爲這將是矯枉過正的這個問題(特別是因爲配對對話框只需要顯示一次) – 2016-10-17 07:33:46