2011-07-25 91 views
11

大家好!通知欄上的藍牙配對請求?

前段時間在Android上開始使用藍牙進行編程。但是現在我遇到了一些問題。我想知道爲什麼配對請求有時會顯示在通知欄中,有時會跳過並直接顯示對話框。

例如: 我開始我的配對請求從嵌入式設備,然後有一個通知,如這一個:

In english: Pairing request for Bluetooth

有時我沒有與通知打擾,我的對話只是按照我的意圖顯示出來。

Pairing dialog shows up and there was no notification on the status bar

有沒有辦法趕上該通知並顯示該對話框或這是一個錯誤在我的代碼,當我發起藍牙配對?

編輯:

更新1:

經過了雷諾給我的答案,它實際上取決於各種各樣的事。還有其他方法直接顯示對話框。配對請求到達時調用以下方法。支票是爲了看做,如果對話應該在前臺(真)來顯示或通知(假):

public boolean shouldShowDialogInForeground(String deviceAddress) { 
    // If Bluetooth Settings is visible 
    if (mForegroundActivity != null) return true; 

    long currentTimeMillis = System.currentTimeMillis(); 
    SharedPreferences sharedPreferences = getSharedPreferences(); 

    // If the device was in discoverABLE mode recently 
    long lastDiscoverableEndTime = sharedPreferences.getLong(
      BluetoothDiscoverableEnabler.SHARED_PREFERENCES_KEY_DISCOVERABLE_END_TIMESTAMP, 0); 
    if ((lastDiscoverableEndTime + GRACE_PERIOD_TO_SHOW_DIALOGS_IN_FOREGROUND) 
      > currentTimeMillis) { 
     return true; 
    } 

    // If the device was discoverING recently 
    if (mAdapter != null && mAdapter.isDiscovering()) { 
     return true; 
    } else if ((sharedPreferences.getLong(SHARED_PREFERENCES_KEY_DISCOVERING_TIMESTAMP, 0) + 
      GRACE_PERIOD_TO_SHOW_DIALOGS_IN_FOREGROUND) > currentTimeMillis) { 
     return true; 
    } 

    // If the device was picked in the device picker recently 
    if (deviceAddress != null) { 
     String lastSelectedDevice = sharedPreferences.getString(
       SHARED_PREFERENCES_KEY_LAST_SELECTED_DEVICE, null); 

     if (deviceAddress.equals(lastSelectedDevice)) { 
      long lastDeviceSelectedTime = sharedPreferences.getLong(
        SHARED_PREFERENCES_KEY_LAST_SELECTED_DEVICE_TIME, 0); 
      if ((lastDeviceSelectedTime + GRACE_PERIOD_TO_SHOW_DIALOGS_IN_FOREGROUND) 
        > currentTimeMillis) { 
       return true; 
      } 
     } 
    } 
    return false; 
} 

這是從源代碼片段,正如你可以看到,有使對話框顯示的方式:

  1. 如果設備在發現模式最近
  2. 如果如果該設備在設備選擇器中挑選最近0的設備是最近發現
  3. 如果藍牙設置是可見

回答

8

作爲每a comment I saw in the android source code

BluetoothPairingRequest爲任何藍牙配對 請求的接收器。它會檢查當前是否可以看到藍牙設置,並且會調出密碼,密鑰或確認輸入對話框。 否則它會在狀態欄中放置一個通知,可以通過點擊 來調出配對輸入對話框。

所以是的,根據BT的可見性,對話框/通知將顯示。

ninja edit: 

這可能會根據所使用的硬件而有所不同。

  • 如果設備是最近
  • 發現模式如果如果該設備在設備選擇器中挑選最近
+0

哇感謝里諾設備最近發現

  • 。這應該在開發中真正解釋。文檔!所以我應該把它放在前面我想或者讓它有點可見,但我會試試看,但如果你知道答案,請隨時分享:) – Mazze

  • +0

    我在談論BT的可見性,你應該發送一個ACTION_REQUEST_DISCOVERABLE意圖請求設備可見,以便其他設備可以找到它。 – Reno

    +0

    我真的這樣做,但我發現設備時運行'cancelDiscovery()'。在[鏈接](http://developer.android.com/guide/topics/wireless/bluetooth.html#ConnectingDevices)中,您可以在「發現設備」下看到,一旦發現設備,應該運行'cancelDiscovery()' ... 對? – Mazze