【问题标题】:Android check is bluetooth in doze modeAndroid 检查是蓝牙处于打盹模式
【发布时间】:2019-01-30 14:54:22
【问题描述】:

美好的一天。 我想知道现在蓝牙扫描是否不可用(被打盹模式锁定?)。

现在我用这种方法检查:

fun isInDozeMode(context: Context) : Boolean {
    val powerManager = context.getSystemService(Context.POWER_SERVICE) as PowerManager
    return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && powerManager.isDeviceIdleMode
}

但是即使我刚刚收到蓝牙(iBeacon)事件,这个方法也会返回true。

【问题讨论】:

    标签: android bluetooth bluetooth-lowenergy altbeacon android-doze


    【解决方案1】:

    蓝牙不受打盹模式的直接影响:

    打盹不会影响进行蓝牙扫描或运行基于 Handler 的计时器的能力,但会影响使用 Android AlarmManager 系统的能力,一些基于信标的系统使用该系统来安排蓝牙扫描。对于基于 Android 信标库的应用程序,禁用警报不会导致扫描信标出现问题,因为它仅在基于 Handler 的计时器失败时使用警报作为备份。在运行 Android M 第三个预览版(内部版本号 MPA44l)的 Nexus 9 上进行的测试表明,Beacon 检测在 Doze 状态下会继续正常进行。

    请参阅我的博文here。虽然该博客文章是为 Android 6.0 编写的,但随后在 7.0 中添加的打盹更改也不会影响蓝牙扫描。见here

    【讨论】:

      【解决方案2】:

      检测应用何时因打盹而进入/退出空闲模式

      操作系统将发送DEVICE_IDLE_MODE_CHANGED 广播,以便我们可以跟踪应用何时进入或退出空闲模式。

      注意:此广播将在设备偶尔启动或结束 10 分钟空闲维护窗口时发送。

      见:https://developer.android.com/reference/android/os/PowerManager.html#ACTION_DEVICE_IDLE_MODE_CHANGED)

      【讨论】:

      • 不幸的是,isDeviceIdleMode() 方法是一样的。我怎么知道蓝牙扫描是否被打瞌睡禁用/启用?
      猜你喜欢
      • 2016-06-27
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      • 2017-05-20
      • 1970-01-01
      • 1970-01-01
      • 2018-09-23
      • 1970-01-01
      相关资源
      最近更新 更多