-1

你好安卓开发者

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

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

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

从 API 文档中, http: //developer.android.com/reference/android/media/AudioManager.html#RINGER_MODE_CHANGED_ACTION声明 Intent 在其额外内容中包含 EXTRA_RINGER_MODE。然而,这并没有帮助。那是当前设置,我可以从AudioManager.getRingerMode().

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

4

1 回答 1

0

无法从 API 中获取之前的振铃模式,但您可以使用以下模式实现此目的。

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

之后,当您的广播接收器收到振铃模式更改并且您想知道之前的模式时,您可以绑定到 RingerModeMonitorService 并向其发送一个Message. RingerModeMonitorService 读取持久的振铃模式并使用 Message 和Handler返回。

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

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

于 2016-01-29T04:14:16.070 回答