我想知道音频模式(由AudioManager.getMode()返回)何时发生了变化。这样我可以在模式不是MODE_NORMAL时禁用我的应用程序中的功能。显然我可以轮询,但这不是电池友好和浪费CPU。
当有来电时有广播意图,但这是无法使用的,因为它还会告诉您传入的电话号码,我不希望这些权限适用于我的应用。用户切换到不同的应用程序可能会发生模式更改,在这种情况下我的Activity会知道,但是还有许多其他情况下音频模式可能会发生变化而我不知道。
我无法使用2.2中的AudioFocus内容,因为我需要支持1.6以上版本。
编辑:我想要停止的功能包括震动检测和各种计时器。我想在非正常的音频模式下进入休眠模式,并在MODE_NORMAL上再次激活。
答案 0 :(得分:2)
我建议进行两阶段攻击。
将AudioFocus用于其支持的平台。这类似于90%的手机,因此对于大多数用户来说,这将提供最佳解决方案。您的应用程序无法支持这两种实现,只是在运行时提供适用于底层平台的实现。
对于1.6,我建议如下。据推测,您想要影响的应用程序中的功能是某种音频播放。如果您的应用正在播放音频,则轮询的增量电池耗尽以查看音频模式是否会变得相对较小。
当您不播放音频时,您只需在开始播放音频之前查询当前的音频模式。
对于您指定的情况,听取传感器更改和运行计时器的电池影响再次使轮询音频模式的效果相形见绌 - 特别是当您尝试在模式为时启用您的功能时正常。
由于您唯一希望在短时间内禁用某些功能,因此您最好在呼叫正在进行之前执行您要禁用的任何操作之前立即查询音频模式。
步骤变为: