收到 RINGER_MODE_CHANGED 时查询之前的铃声模式

Query previous ringer mode when RINGER_MODE_CHANGED received

你好android开发者

我声明了一个已注册的广播接收器 android.media.RINGER_MODE_CHANGED。这工作正常,每次铃声模式更改时都会调用它。

真正的问题是我需要知道铃声模式转换。 IE。当铃声模式从正常变为静音时,我需要执行一些逻辑,反之亦然。如果铃声模式从静音变为振动,则什么都不做。

到目前为止,我所做的所有研究都指向一个事实,即在您收到 RINGER_MDOE_CHANGED 的那一刻,正如它所说,它已经改变了。您不知道更改之前的铃声模式是什么。

从 API 文档中,http://developer.android.com/reference/android/media/AudioManager.html#RINGER_MODE_CHANGED_ACTION 声明该意图在其额外内容中包含 EXTRA_RINGER_MODE。但是,这无济于事。这是当前设置,我可以从 AudioManager.getRingerMode().

得到它

你知道有什么方法可以查询上次的铃声模式吗?希望你们能帮忙。你是我最后的希望。谢谢。

无法从 API 获取以前的铃声模式,但您可以使用以下模式实现。

  1. 有一个服务(我们将其命名为 RingerModeMonitorService),它包含一个铃声模式,它只是一个 int 类型的变量。保留 stopSelf() using persistInt().
  2. 之前的 int 值
  3. 让 BroadcastReceiver 注册 RINGER_MODE_CHANGED_ACTION。在其 onReceive() 上发出启动 RingerModeMonitorService 的意图。将意图标志设置为铃声模式。
  4. 有一个 BroadcastReceiver 注册 BOOT_COMPLETED 动作。同样,发出启动 RingerModeMonitorService 的意图,并将铃声模式设置为其标志。你也可以让你的主 activity 开始 RingerModeMonitorService。这是初始化存储在RingerModeMonitorService.
  5. 中的铃声模式

之后,当您的广播接收器收到振铃器模式更改并且您想知道之前的模式时,您可以绑定到 RingerModeMonitorService 并向其发送 Message. RingerModeMonitorService read the persisted ringer mode and return using Message and Handler.

听起来很复杂,但想法很简单。在每次铃声模式更改时,我都会记下(保留)铃声模式值以供下次参考。但是,请确保您在记下之前读取了该值,否则它会被覆盖,那么您每次读取的值都是当前的振铃模式,而不是之前的。

http://developer.android.com/guide/components/bound-services.html#Messenger 有更多关于服务通信的细节