我有一个应用程序,当你按下屏幕上的按钮时,它会播放一个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*/)
{
}
答案 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
方法中实施您的解决方案也会阻止音乐方向改变可能是不合需要的。