[英]Can someone explain to me how this method works?
我有一個應用程序,當您按下屏幕上的按鈕時,它會播放mp3文件。 我要這樣做,以便在播放mp3時按返回按鈕或主頁按鈕,歌曲會停止播放。 我想做一個if語句,檢查是否按下了后退/主頁按鈕,並且如果兩種情況都成立,則調用myMediaPlayer.stop();。
到目前為止,到目前為止,我發現的唯一一種檢查是否按下后退按鈕的方法是:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK)) {
return true;
}
return super.onKeyDown(keyCode, event);
}
我的問題是我不知道如何在if語句中調用onKeyDown並檢查是否按下了后退或主頁按鈕。
我在哪里可以找到鍵碼以及需要傳遞給它的事件?
**以下是初始化和播放mp3文件的代碼:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final MediaPlayer mp = new MediaPlayer();
Button b = (Button) findViewById(R.id.default_activity_button);
b.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
try {
mp.reset();
AssetFileDescriptor afd;
afd = getAssets().openFd("sound.mp3");
mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
mp.prepare();
mp.start();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();enter code here
}
}
});
有什么辦法可以做這樣的事情:
if(mp.isPlaying() == true && /* pseudo code*/BackButtonPressed == true/* pseudo code*/)
{
}
發生任何按鍵按下事件時,操作系統都會自動調用此功能。 因此,您不需要自己明確地調用它。 您只需要檢查您需要確定的按鍵。 return語句告訴OS您是否已自行處理按鍵。 就像這樣,當您返回true時,操作系統就會知道您已經成功處理了該事件,並且不需要為該特定按鍵做任何事情。
但是,檢測后退按鍵的更標准方法是重寫onBackPressed()。
像這樣
@Override
public void onBackPressed() {
//stop playing mp3
}
在您的情況下,一種更具體的解決方案是在按下返回鍵或主屏幕按鈕后,如果您的“活動”進入“暫停”狀態,則立即停止播放音樂。
@Override
protected void onPause(){
//stop playing mp3
super.onPause();
}
您是在談論UI按鈕或鍵盤鍵嗎? onKeyDown
用於捕獲鍵盤按鍵。
如果要捕獲按鈕單擊,則需要向按鈕注冊clickListener。
如果要捕獲鍵,則需要在視圖中注冊OnKeyListener
。
如果要捕獲特殊的后退按鈕,則只需重寫活動的onBackPressed()
方法即可。 所以像這樣:
public void onBackPressed() {
if (mp.isPlaying()) {
// do want you want
mp.stopPlaying();
} else {
// default behavior ?
super.finish(); // dismiss the current activity
}
}
應該管用。
onKeyDown
是一個公共方法,當在設備上按下按鈕時,Android系統會自動調用該方法。 您無需直接調用它,但需要@Override
。 該KeyEvent
,該系統通過將其描述這里 。 它包含許多引用特定鍵的常量。 我不在家進行測試,但是我認為您想要這樣的東西:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (((keyCode == KeyEvent.KEYCODE_BACK)||(keyCode == KeyEvent.KEYCODE_HOME))&&(mp.isPlaying())) {
mp.stop();
}
return super.onKeyDown(keyCode, event);
}
編輯:我還沒有足夠的代表直接評論@Swayam的解決方案,但是我相信在onPause
方法中實現您的解決方案還會在方向改變的情況下停止播放音樂,這可能是不可取的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.