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