2012-07-25 2 views
9

내가 삼성 갤럭시에 두 개의 터치 버튼 뒤로 버튼 내가 모든 falsesoundEffectsEnabled을 설정안 모든 음향 효과 안드로이드

메뉴 버튼이 S3를 내 응용 프로그램을 테스트하고 있습니다 (너무 하드웨어 키) 내 루트보기, 및 사용자 지정 테마를 만들려고 (here에 지적) 및 응용 프로그램의 매니페스트 파일에 해당 테마를 설정 (나는 각 Activity 요소를 추가하려고). 성공하지 못했습니다.

여기/입술에 내 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

처럼 보인다? 왜냐하면 뒤, 집, 뒷말 및 기타 하드웨어 키는 시스템 프로세스에 의해 제어된다는 것이 내 이해에 달려 있기 때문입니다. –

답변

2

응용 프로그램 또는 모든 활동이 실행되는 동안 AudioManager을 사용하여 모든 시스템 소리를 음소거 할 수 있습니다.

setStreamMute (INT, 불리언)

음소거 또는 오디오 스트림을 뮤트 해제.

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(); 
} 
관련 문제