2012-07-25 62 views
9

我测试我的应用程序上三星Galaxy S3,它有两个触摸式按键后退按钮和菜单按钮禁用所有声音效果(硬件按键太)在Android

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

这里是RES我的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也可以工作,但背部和菜单触摸按钮仍然播放声音

+0

是整个设备转向静音模式的选项?因为这是我的理解,后面,家庭,最近和任何其他硬件密钥由系统进程控制。 – 2015-06-27 20:22:17

回答

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(); 
}