簡體   English   中英

有人可以向我解釋這種方法如何工作嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM