Android 5.0 (API 21) 中 AudioManager.setRingerMode() 的替代方案

Posted

技术标签:

【中文标题】Android 5.0 (API 21) 中 AudioManager.setRingerMode() 的替代方案【英文标题】:Alternative for AudioManager.setRingerMode() in Android 5.0 (API 21) 【发布时间】:2015-02-06 20:53:03 【问题描述】:

我使用 AudioManager.setRingerMode() 来处理我的应用程序中的设备音量:

AudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT) 关闭振动和声音。 AudioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE) 关闭声音并打开振动。 AudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL) 开启声音,开启震动。

换句话说,我能够控制设备音量并达到所有“模式”。

但是,在 android 5.0 中,仅使用 AudioManager.setRingerMode 无法处理所有模式的设备音量。

根据documentation:

将设备设置为 RINGER_MODE_SILENT 会导致设备进入新的优先模式。如果您将其设置为 RINGER_MODE_NORMAL 或 RINGER_MODE_VIBRATE,设备将退出优先模式。

如何在 Android 5.0 中处理设备音量的所有模式(无、振动优先、声音优先、全部振动、全部声音)?

【问题讨论】:

您指的是哪个通知?您是否使用通知管理器来创建它们? 我的意思是设备的声音通知。如何通过代码达到“完全沉默”? 【参考方案1】:

使用新的 5.0 API,有许多方法可用于设置铃声/振动。

setVibrate (long[] pattern)

此方法控制设备的振动。需要很长时间,其中第一个值表示在打开vibrator 之前要等待的milliseconds 的数量。更多详情:

http://developer.android.com/reference/android/os/Vibrator.html#vibrate(long[], int)

http://developer.android.com/reference/android/app/Notification.Builder.html#setVibrate(long[])

setDefaults (int defaults)

这一项设置通知属性,即SOUNDVIBRATEALL 等。

来自文档:

该值应为以下一个或多个字段与 按位或:DEFAULT_SOUND、DEFAULT_VIBRATE、DEFAULT_LIGHTS。

http://developer.android.com/reference/android/app/Notification.Builder.html#setDefaults(整数默认值)

希望这会有所帮助。

【讨论】:

我不想发送声音通知或振动。问题是关于设备的声音控制。简而言之,如何将设备的声音控制设置为“无”? developer.android.com/reference/android/media/….. 检查链接中的第一行..Google 建议每个应用处理自己的声音/振动,而不是尝试控制设备本身的音量.. 好的,我同意尝试控制设备音量不是一个好习惯。但是,假设我想尝试控制它。有什么办法吗? 好的,首先OP提到了在应用程序中处理通知。 OP 中提供的链接还指向 5.0 中的通知行为更改。如果您担心处理来自您的应用程序的通知声音,那么答案应该可以正常工作。如果您正在谈论控制设备的声音,您仍然可以使用 RingerMode 类。 developer.android.com/reference/android/media/…。我猜需要更新 OP。 哦,对不起。通过通知,我想指的是设备音量。如果我试图设置我的应用程序的铃声/振动,你的答案是正确的。使用 RingerMode 类,我无法达到音量设备的“无”状态。有没有办法达到这个状态?

以上是关于Android 5.0 (API 21) 中 AudioManager.setRingerMode() 的替代方案的主要内容,如果未能解决你的问题,请参考以下文章

Android 5.0(API 21)以下系统兼容(retrofitokhttp)

如何在 Camera2 API Android 5.0 中获取单个预览帧?

Eclipse 中所有 API 级别的 Android 5.0 FAB 按钮

android 21 是啥版本

求助IMX6+Android4.4移植RTL8723AU驱动问题

如何使用为 Android 5.0 (Lollipop) 提供的新 SD 卡访问 API?