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

9
我正在测试我的应用程序,在三星Galaxy S3上进行测试,该手机有两个触摸按钮:返回按钮和菜单按钮。
我将soundEffectsEnabled设置为false,对所有根视图进行了尝试,并尝试使用自定义主题(如此处所指出的)并在应用程序清单文件中设置该主题(我也尝试将它添加到每个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 也可以工作,但是返回和菜单触摸按钮仍然会发出声音


将整个设备调至静音模式是一个选项吗?因为据我所知,后退、主页、最近使用和其他任何硬件键都受系统进程控制。 - George Daramouskas
1个回答

2
您可以使用AudioManager来在您的应用程序或任何活动运行时静音所有系统声音。 setStreamMute(int, boolean)

静音或取消静音音频流。

静音命令受到客户端进程死亡的保护:如果一个进程在某个流上有一个活动的静音请求,当该进程死亡时,此流将自动取消静音。

给定流的静音请求是累积的: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();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接