收到RINGER_MODE_CHANGED时查询以前的振铃模式



你好安卓开发者

我宣布广播接收器注册android.media.RINGER_MODE_CHANGED.这工作正常,它被称为每个铃声模式都改变了。

真正的问题是我需要知道铃声模式的转换。 即,当铃声模式从正常更改为静音时,我需要执行一些逻辑,反之亦然。如果振铃器模式从静音更改为振动,则不执行任何操作。

到目前为止,我所做的所有研究都指向一个事实,即在你收到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类型变量。在使用 persistInt() stopSelf()之前保留 int 值。
  2. 让广播接收器注册RINGER_MODE_CHANGED_ACTION。在其onReceive(),发出启动RingerModeMonitorService的意图。将意图标志设置为振铃器模式。
  3. 让广播接收器寄存器BOOT_COMPLETED操作。同样,发出启动振铃器模式监视器服务的意图,并将振铃模式设置为其标志。您还可以使主要活动开始RingerModeMonitorService。这是为了初始化存储在RingerModeMonitorService中的铃声模式。

之后,当您的广播接收器收到振铃器模式更改并且您想知道以前的模式时,您可以绑定到铃声模式监视器服务并向其发送Message。振铃器模式监视器服务读取持久振铃器模式并使用消息和处理程序返回。

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

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

最新更新