有人可以向我解释这种方法是如何工作的吗?

时间:2015-03-25 19:42:30

标签: java android keylistener

我有一个应用程序,当你按下屏幕上的按钮时,它会播放一个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*/)
        {

        }

3 个答案:

答案 0 :(得分:2)

当发生任何按键事件时,操作系统会自动调用此函数。所以,你不需要自己明确地调用它。您只需要检查您需要确定的按键。并且return语句告诉操作系统您是否自己处理了按键操作。同样,当您返回true时,操作系统知道您已成功处理该事件,并且不需要为该特定按键操作执行任何操作。

但是,检测后退按键的更标准方法是覆盖onBackPressed()。

像这样,

@Override
    public void onBackPressed() {
       //stop playing mp3
    }

在您的情况下,一个更具体的解决方案是,当按下后退键或主页按钮时,当您的活动进入暂停时停止播放音乐。

@Override
protected void onPause(){
        //stop playing mp3
        super.onPause();
    }

答案 1 :(得分:0)

您是在谈论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
  }
}

应该有用。

答案 2 :(得分:0)

onKeyDown是Android系统在设备上按下按钮时自动调用的公共方法。您无需直接调用它,但需要@Override它。系统传递给它的KeyEvent被描述为here。它包含许多引用特定键的常量。我不在家测试这个,但我想你想要这样的东西:

@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方法中实施您的解决方案也会阻止音乐方向改变可能是不合需要的。