2012-07-25 63 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(); 
}