收到 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 获取以前的铃声模式,但您可以使用以下模式实现。
- 有一个服务(我们将其命名为
RingerModeMonitorService
),它包含一个铃声模式,它只是一个 int
类型的变量。保留 stopSelf()
using persistInt()
. 之前的 int 值
- 让 BroadcastReceiver 注册 RINGER_MODE_CHANGED_ACTION。在其
onReceive()
上发出启动 RingerModeMonitorService
的意图。将意图标志设置为铃声模式。
- 有一个 BroadcastReceiver 注册 BOOT_COMPLETED 动作。同样,发出启动 RingerModeMonitorService 的意图,并将铃声模式设置为其标志。你也可以让你的主 activity 开始
RingerModeMonitorService
。这是初始化存储在RingerModeMonitorService
. 中的铃声模式
之后,当您的广播接收器收到振铃器模式更改并且您想知道之前的模式时,您可以绑定到 RingerModeMonitorService 并向其发送 Message
. RingerModeMonitorService read the persisted ringer mode and return using Message and Handler.
听起来很复杂,但想法很简单。在每次铃声模式更改时,我都会记下(保留)铃声模式值以供下次参考。但是,请确保您在记下之前读取了该值,否则它会被覆盖,那么您每次读取的值都是当前的振铃模式,而不是之前的。
http://developer.android.com/guide/components/bound-services.html#Messenger
有更多关于服务通信的细节
你好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 获取以前的铃声模式,但您可以使用以下模式实现。
- 有一个服务(我们将其命名为
RingerModeMonitorService
),它包含一个铃声模式,它只是一个int
类型的变量。保留stopSelf()
usingpersistInt()
. 之前的 int 值
- 让 BroadcastReceiver 注册 RINGER_MODE_CHANGED_ACTION。在其
onReceive()
上发出启动RingerModeMonitorService
的意图。将意图标志设置为铃声模式。 - 有一个 BroadcastReceiver 注册 BOOT_COMPLETED 动作。同样,发出启动 RingerModeMonitorService 的意图,并将铃声模式设置为其标志。你也可以让你的主 activity 开始
RingerModeMonitorService
。这是初始化存储在RingerModeMonitorService
. 中的铃声模式
之后,当您的广播接收器收到振铃器模式更改并且您想知道之前的模式时,您可以绑定到 RingerModeMonitorService 并向其发送 Message
. RingerModeMonitorService read the persisted ringer mode and return using Message and Handler.
听起来很复杂,但想法很简单。在每次铃声模式更改时,我都会记下(保留)铃声模式值以供下次参考。但是,请确保您在记下之前读取了该值,否则它会被覆盖,那么您每次读取的值都是当前的振铃模式,而不是之前的。
http://developer.android.com/guide/components/bound-services.html#Messenger 有更多关于服务通信的细节