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

Tho*_*alc 9 java audio android android-theme

我在三星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>
Run Code Online (Sandbox Code Playgroud)

以及我Application元素的开头标记:

<application
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:theme="@style/MyCustomTheme" >
Run Code Online (Sandbox Code Playgroud)

它构建和运行正常.NoTitleBar.Fullscreen也工作,但后面和菜单触摸按钮仍然播放声音.

mpk*_*uth 2

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

setStreamMute(int, 布尔值)

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

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

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