在Android上禁用所有声音效果(硬件键)

时间:2012-07-25 20:14:56

标签: java android audio android-theme

我正在三星Galaxy S3上测试我的应用,它有两个触摸按钮,后退按钮和菜单按钮

我将soundEffectsEnabled设置为false到我的所有根视图,并尝试制作自定义主题(如here中所述)并在应用程序的清单文件中设置该主题(我也尝试将它添加到每个Activity元素中)。没有成功。

这是我在 res / values 中的xml文件:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyCustomTheme" parent="@android:style/Theme.NoTitleBar.Fullscreen">
    <item name="android:soundEffectsEnabled">false</item>
</style>
</resources>

我的Application元素的开头标记:

<application
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:theme="@style/MyCustomTheme" >

构建并正常运行NoTitleBar.Fullscreen也有效,但后面和菜单触摸按钮仍会播放声音

1 个答案:

答案 0 :(得分:2)

您可以使用AudioManager在应用程序或任何活动运行时将所有系统声音静音。

setStreamMute(int,boolean)

  

将音频流静音或取消静音。

     

静音命令可以防止客户端进程死亡:如果a   流上有活动静音请求的进程终止,此流将   自动取消静音。

     

对给定流的静音请求是累积的:AudioManager   可以从一个或多个客户端收到几个静音请求   仅当相同数量的取消静音请求时,流才会取消静音   收到了。

     

为了获得更好的用户体验,应用程序必须取消静音流的静音   如果合适,在onPause()和静音中再次使用onResume()。

所以,实现看起来像这样

@Override
protected void onResume() {
    super.onResume();
    AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
    audioManager.setStreamMute(AudioManager.STREAM_SYSTEM, true);
}

@Override
protected void onPause() {
    AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
    audioManager.setStreamMute(AudioManager.STREAM_SYSTEM, false);
    super.onPause();
}