2017-09-14 128 views
3

在Android 8.0,Oreo之前,您可以使用已注册的广播detect a headset plugged in with a background service。使用Android O的后台执行限制,您不能再通知没有这样做。如何检测在Android 8.0上插入耳机的targetSDKVersion> = 26

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

所以你不能使用后台服务。你不能通过清单接收器唤醒。什么是解决方案?永远不要更新你的targetSDKVersion?

+2

因为我认为这是Android 8.0的一个被忽视的反响,我已经向框架团队提出了一个问题。 https://issuetracker.google.com/issues/65672608 – Justin

回答

0

看来,官方文档,可以使用ACTION_HEADSET_PLUG没有的AndroidØ限制,因为它是在list of the exempted broadcasts

注:一些隐含的广播正在从这个 限制豁免。应用程序可以继续在其清单中为这些 广播注册接收方,无论该应用的目标级别为 。有关豁免广播的清单,请参阅Implicit Broadcast Exceptions

UPDATE:

但IRL,如CommonsWare写道,只有

intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);

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

+1

如果我正确阅读源代码,文档似乎不正确。 – CommonsWare

+0

似乎你是对的 - 源代码是真相的源泉。我会检查它。 –