4

我想知道音频模式(由AudioManager.getMode()返回)何时改变。这样我就可以在模式不是 MODE_NORMAL 时禁用我的应用程序中的功能。显然我可以进行投票,但这对电池不友好并且浪费 CPU。

有来电时有广播意图,但这不可用,因为它还会告诉您传入的电话号码,我不希望我的应用程序获得这些权限。用户切换到不同的应用程序时可能会发生模式更改,在这种情况下我的 Activity 会知道,但是在许多其他情况下音频模式可能会更改,而我只是不知道。

我不能使用 2.2 的 AudioFocus 东西,因为我需要支持 1.6 以后的版本。

编辑:我想停止的功能包括抖动检测和各种计时器。我想在音频模式非正常时进入休眠模式,并在 MODE_NORMAL 上再次激活。

4

1 回答 1

2

我建议分两阶段攻击。

将 AudioFocus 用于它支持的平台。这相当于 90% 的手机,因此对于大多数用户而言,这将提供最佳解决方案。您的应用程序没有理由不能同时支持这两种实现,而只是在运行时提供适合底层平台的一种。

对于 1.6,我建议如下。据推测,您想要影响的应用程序中的功能是某种音频播放。如果您的应用程序正在播放音频,则轮询以查看音频模式是否更改的增量电池消耗将相对较小。

当您不播放音频时,您只需要在开始播放音频之前查询当前的音频模式即可。

对于您指定的情况,侦听传感器更改和运行计时器对电池的影响再次使轮询音频模式的效果相形见绌 - 特别是当您试图在模式正常时启用您的功能时。

由于您只是希望在电话处于通话状态的短时间内禁用某些功能,因此最好在通话过程中执行您希望禁用的任何操作之前立即查询音频模式。

所以步骤变成了:

  • 在播放/操作之前检查音频模式。
  • 在播放期间轮询音频模式。
于 2012-02-01T19:20:51.127 回答