大家好!通知欄上的藍牙配對請求?
前段時間在Android上開始使用藍牙進行編程。但是現在我遇到了一些問題。我想知道爲什麼配對請求有時會顯示在通知欄中,有時會跳過並直接顯示對話框。
例如: 我開始我的配對請求從嵌入式設備,然後有一個通知,如這一個:
有時我沒有與通知打擾,我的對話只是按照我的意圖顯示出來。
有沒有辦法趕上該通知並顯示該對話框或這是一個錯誤在我的代碼,當我發起藍牙配對?
編輯:
更新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;
}
這是從源代碼片段,正如你可以看到,有使對話框顯示的方式:
- 如果設備在發現模式最近
- 如果如果該設備在設備選擇器中挑選最近0的設備是最近發現
- 如果藍牙設置是可見
哇感謝里諾設備最近發現
我在談論BT的可見性,你應該發送一個ACTION_REQUEST_DISCOVERABLE意圖請求設備可見,以便其他設備可以找到它。 – Reno
我真的這樣做,但我發現設備時運行'cancelDiscovery()'。在[鏈接](http://developer.android.com/guide/topics/wireless/bluetooth.html#ConnectingDevices)中,您可以在「發現設備」下看到,一旦發現設備,應該運行'cancelDiscovery()' ... 對? – Mazze