【问题标题】:How To Detect A Headset Plugged In on Android 8.0 with targetSDKVersion >= 26如何检测在 Android 8.0 上插入 targetSDKVersion >= 26 的耳机
【发布时间】:2017-09-14 16:25:08
【问题描述】:

在 Android 8.0 之前,奥利奥,您可以通过注册广播 detect a headset plugged in with a background service。由于 Android O 的后台执行限制,您无法再在没有通知的情况下执行此操作。

虽然 ACTION_HEADSET_PLUG 是例外广播,但它仍然不会发送到 Manifest 注册的接收者。

所以你不能使用后台服务。而且您无法通过清单接收器被唤醒。解决方案是什么?从不更新您的 targetSDKVersion?

【问题讨论】:

标签: android android-broadcastreceiver android-8.0-oreo


【解决方案1】:

看来,根据官方文档,你可以使用ACTION_HEADSET_PLUG,没有Android O限制,因为它在list of the exempted broadcasts中:

注意:一些隐式广播目前不受此限制 局限性。应用程序可以继续为这些注册接收器 无论应用程序是什么 API 级别,都在其清单中进行广播 瞄准。有关豁免广播的列表,请参阅Implicit Broadcast Exceptions

更新:

但是 IRL,正如CommonsWare 所写,只有

intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);

ACTION_HEADSET_PLUG 的标志,而不是 Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND 标志,例如,ACTION_LOCALE_CHANGED

【讨论】:

  • 如果我正确阅读源代码,文档似乎不正确。
  • 看来你是对的 - 源代码是事实的来源。我会检查的。
猜你喜欢
  • 2010-10-26
  • 2018-05-24
  • 2011-09-09
  • 2017-04-24
  • 2012-01-18
  • 2013-05-08
  • 2011-04-04
  • 2012-11-16
  • 1970-01-01
相关资源
最近更新 更多