2014-03-29 71 views
2

好吧,如果我們想從硬件「返回」按鈕禁用的Android從硬件「返回」按鈕「默認聲音」

禁用Android的默認聲音「,如果它採用的是Android

對象我們可以通過

onClick (View v) { 
    v.setSoundEffectsEnabled(false); 
} 

禁用或通過

<Button 
    android:id="@+id/bSignin" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:soundEffectsEnabled="false" 
/> 
通過xml禁用它

但是,如果是硬件按鈕

該怎麼做?

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) 
    { 
    // ? 
    } 
} 

注:我不想完全禁用所有的聲音,我只是想禁用默認的聲音,併發揮出自己的應用程序,而不是聲音

回答

-1

我不認爲這是可能的。

系統設置中有一個選項可供用戶使用。硬件後退按鈕不是您的應用程序的一部分。用戶的工作是決定他們是否想聽到或不聽。你不能決定。

+0

然而當他們點擊回到我的應用程序,這是我的應用程序的一部分...所以什麼是應該怎麼辦? –

+0

我告訴過你,這是不可能的。如果您有空間訪問權限,則可以訪問系統偏好設置文件並禁用所有點擊聲音。這是可能的,但很難做到。沒有root訪問權限,您無法更改此係統行爲。 – tasomaniac

+0

這個答案是不正確的,tasomaniac。您可以將onResume()中的音頻系統服務靜音,然後在onPause()中重新打開它,請參閱我的答案。 – AaronCarson

0

你可以試試這個:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) 
    { 
     return false; 
    } 
} 
+0

不行,夥計.. –

+0

你從此代碼得到布爾結果...... – user3467178

+0

請再次閱讀我的問題 –

3

這是可能的,我發現this answer並希望分享它,因爲我可以用此溶液來禁用硬件默認後退按鈕。下面的代碼:

@override 
public void onResume(){ 
    super.onResume(); 
    AudioManager mgr = (AudioManager)getSystemService(Context.AUDIO_SERVICE); 
    mgr.setStreamMute(AudioManager.STREAM_SYSTEM, true); 
} 


@override 
public void onPause(){ 
    super.onPause(); 
    AudioManager mgr = (AudioManager)getSystemService(Context.AUDIO_SERVICE); 
    mgr.setStreamMute(AudioManager.STREAM_SYSTEM, false); 
} 
+0

是否要靜音音樂播放? – tasomaniac

+0

我用它來防止播放我的應用程序之外的聲音,例如按鈕的通知聲音。然後,我使用自己的MediaPlayer,SoundPool等類的實例從res/raw播放我的自定義聲音文件。我的聲音仍在播放:-) – AaronCarson

+0

不錯。很高興知道。謝謝。 – tasomaniac