Java 禁用Android上的所有音效(也包括硬件按键)

Java 禁用Android上的所有音效(也包括硬件按键),java,android,audio,android-theme,Java,Android,Audio,Android Theme,我正在三星Galaxy S3上测试我的应用程序,它有两个触摸按钮:后退按钮和菜单按钮 我将所有根视图的soundEffectsEnabled设置为false,并尝试创建自定义主题(如中所述)并在应用程序的清单文件上设置该主题(我还尝试将其添加到每个活动元素)。没有成功 以下是我的xml文件,格式为res/values: 它可以正常构建和运行NoTitleBar。全屏也可以工作,但是后退和菜单触摸按钮仍然播放声音您可以在应用程序或任何活动运行时使用来静音所有系统声音 setStreamMute(i

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

我将所有根视图的
soundEffectsEnabled
设置为
false
,并尝试创建自定义主题(如中所述)并在应用程序的清单文件上设置该主题(我还尝试将其添加到每个
活动
元素)。没有成功

以下是我的xml文件,格式为res/values:

它可以正常构建和运行
NoTitleBar。全屏
也可以工作,但是后退和菜单触摸按钮仍然播放声音

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

setStreamMute(int,boolean)

静音或取消静音音频流

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

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

将整个设备转到静音模式是一种选择吗?因为据我所知,back、home、recents和任何其他硬件键都是由系统进程控制的。
<application
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:theme="@style/MyCustomTheme" >
@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();
}