通知栏上的蓝牙配对请求?

Maz*_*zze 12 android bluetooth request android-notification-bar

嘿大家!

在Android之前开始使用蓝牙编程.但现在我遇到了一些问题.我想知道为什么配对请求有时会出现在通知栏中,有时会跳过此对话框并直接显示对话框.

例如:我从嵌入式设备发起配对请求,然后会出现如下通知:

英文:配对蓝牙请求

有时我不必费心去通知,我的对话框就像我预期的那样显示出来.

显示配对对话框,状态栏上没有通知

有没有办法捕获该通知并显示对话框,或者当我启动蓝牙配对时,这是我的代码中的错误?

编辑:

更新1:

检查了Reno给我的答案,这实际上取决于各种各样的事情.还有其他方法可以直接显示对话框.当配对请求到达时,调用以下方法.进行检查以查看对话框是应该显示在前台(true)还是显示为通知(false):

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;
}
Run Code Online (Sandbox Code Playgroud)

这是源代码的一个片段,您可以看到有以下方法可以显示对话框:

  1. 如果设备最近处于可发现模式
  2. 如果该设备最近发现
  3. 如果最近在设备选择器中拾取了设备
  4. 如果可以看到蓝牙设置

Ren*_*eno 9

根据我在android源代码中看到的评论

BluetoothPairingRequest是任何蓝牙配对请求的接收器.它会检查蓝牙设置当前是否可见,并显示PIN,密码或确认输入对话框.否则,它会在状态栏中放置一个通知,可以单击该状态栏以显示"配对"条目对话框.

所以,是的,根据BT的可见性,将显示对话框/通知.

ninja edit: 
Run Code Online (Sandbox Code Playgroud)

这可能因使用的硬件而异.

  • 如果设备最近处于可发现模式
  • 如果设备最近发现了
  • 如果最近在设备选择器中拾取了设备