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

时间:2016-01-15 15:04:43

标签: android android-audiomanager android-broadcastreceiver

Hello android开发者

我宣布广播接收者已注册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()获得它。

您知道我可以查询最后一个振铃模式吗?希望你们能帮忙。你是我最后的希望。谢谢。

1 个答案:

答案 0 :(得分:0)

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

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

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

    听起来很复杂,但这个想法很简单。在每次振铃模式改变时,我记下(持续)振铃模式值以供下次参考。但是,请确保在记下它之前读取该值或将其覆盖,然后每次读取的值是当前的振铃模式而不是前一个。

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