Android ICS 控制静音模式关闭、振动或静音

标签 android

我到处寻找我能想到的答案,关于 Android 中的音频有很多问题,但我找不到任何关于 ICS 中的新设置的问题。

我的应用程序有一个功能,用户可以按下一个按钮,手机的铃声就会静音,并且不会振动。这是我的代码,到目前为止运行良好:

        mAudioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_OFF);
        mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
        mAudioManager.setStreamVolume(AudioManager.STREAM_RING, 0, 0);

现在发生的情况是,当用户按下按钮时,音量仍然变为 0,但手机(特别是 Galaxy S3)会出现短暂的振动。然后在设置->声音中,静音模式已从关闭更改为振动。因此,无论何时发生某些事情,它仍然会发出简短的振动通知。我还没有能够进行足够彻底的测试以了解具体发生了什么才能让它像那样振动,但这不是问题的重点。

我的问题是我们如何控制关闭、振动和静音的 ICS 静音模式设置?我希望能够在他们按下该按钮时将其设置为静音,然后在他们再次按下该按钮时返回关闭,或者他们设置的任何设置。我尝试使用 mAudioManager.setStreamMute 方法,但这不是预期的效果,而且它也不会更改静音模式的设置。

在此先感谢您的帮助,非常感谢!!

保罗

最佳答案

好吧,我明白了!!!! +1 到 iturki 寻求帮助,谢谢!!我已经尝试过 RINGER_MODE_SILENT,但认为它不起作用。它没有用,但那是因为它只是解决方案的一半。不过还是需要的!

这是它每次为我工作的方式:

我发现无论是设置 AudioManager.RINGER_MODE_NORMAL 还是 AudioManager.RINGER_MODE_SILENT,我仍然会收到通知的振动。这就是为什么我评论说它不起作用。进一步测试后,我发现不是 RINGER_MODE 设置导致的,实际上是这行代码:

mAudioManager.setStreamVolume(AudioManager.STREAM_RING, 0, 0);

出于某种我不知道的原因,当 RINGER_MODE 设置为 NORMAL 或 SILENT 时,当 STREAM_RING 音量以这种方式设置为 0 时,它会将设置 -> 声音中的静音模式设置更改为振动。

解决方案:

    mAudioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_OFF);
    mAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);

我不得不删除 STREAM_RING 设置并将其保留。现在,当我将它设置为 RINGER_MODE_SILENT 并单独使用 STREAM_RING 时,不再有烦人的半秒振动!!!一个额外的注意事项,我在没有将 VibrateSetting 设置为 OFF 的情况下进行了测试,它仍然有效,但由于其他原因我将其保留在我的应用程序中。

重要提示:我不知道这种从 RINGER_MODE_NORMAL 到 RINGER_MODE_SILENT 的更改将如何影响以前的 Android 版本,所以要小心。如果有人确切知道此更改会对以前的版本产生什么影响,请随时告诉我们!

再次感谢 iturki 的帮助!

关于Android ICS 控制静音模式关闭、振动或静音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12230388/

相关文章:

Android - 在 Android 1.6 中开发的应用程序可以在 Android 2.0 中运行吗?

Android 相机预览拍摄的图像在特定设备上不显示

Android google map - 点击标记时获取 map 点击位置

java - Android:防止按钮上的多个 onClick 事件(已禁用)

android - 加速度计记录器 : experiencing occasional long delays between frames

java - ListView弹出消息

android - Android 中的圆环按钮

java - 即使指定了 subscribeOn,代码也在主线程上运行

android - native 多线程和 JNI

android - 我想在 ListView 中检测哪个 onFling 事件的 ListItem