繁体   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