当“Back”或“Home”被按下时,Android应用程序是FC
我创建了一个播放声音文件的android应用程序。当我按下home键我注意到,继续播放声音并没有停止,所以我说我的班级里以下功能:当“Back”或“Home”被按下时,Android应用程序是FC
@Override
protected void onStop()
{
super.onStop();
finish(); //kill the thread
pS.reset(); //stop the sound
}
@Override
protected void onPause()
{
super.onPause();
finish(); //kill the thread
pS.reset(); //stop the sound
}
当按下“返回”或“家”哪个做工作,它停止音乐,应用程序不会强制关闭。唯一的问题是,声音不得不为FC效力。如果没有声音播放,应用FC。 我猜这是
pS.reset();
功能不知道当声音没有播放时该怎么办。
如果我将其设置为:
PS = NULL;
而不是pS.reset(),当按下“返回”或“主页”时,如果没有FC,它会执行相同的操作吗?
我的PS初始化:
pS = MediaPlayer.create(iAct.this, R.drawable.sound);
编辑: 我注释掉
pS.reset();
,并添加
pS = null;
它没有FC,但声音不停止播放。
我更新了我的onPause():
@Override
protected void onPause()
{
super.onPause();
if (pS.isPlaying()) {
pS.pause(); //stop the sound
finish();
}
else
finish();
}
我的日志:
04-02 13:06:40.563: E/AndroidRuntime(925): FATAL EXCEPTION: main
04-02 13:06:40.563: E/AndroidRuntime(925): java.lang.RuntimeException: Unable to pause activity {com.testcom.myapp/com.testcom.myapp.MyappActivity}: java.lang.NullPointerException
04-02 13:06:40.563: E/AndroidRuntime(925): at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2354)
04-02 13:06:40.563: E/AndroidRuntime(925): at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2311)
04-02 13:06:40.563: E/AndroidRuntime(925): at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:2291)
04-02 13:06:40.563: E/AndroidRuntime(925): at android.app.ActivityThread.access$1700(ActivityThread.java:117)
04-02 13:06:40.563: E/AndroidRuntime(925): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:938)
04-02 13:06:40.563: E/AndroidRuntime(925): at android.os.Handler.dispatchMessage(Handler.java:99)
04-02 13:06:40.563: E/AndroidRuntime(925): at android.os.Looper.loop(Looper.java:123)
04-02 13:06:40.563: E/AndroidRuntime(925): at android.app.ActivityThread.main(ActivityThread.java:3683)
04-02 13:06:40.563: E/AndroidRuntime(925): at java.lang.reflect.Method.invokeNative(Native Method)
04-02 13:06:40.563: E/AndroidRuntime(925): at java.lang.reflect.Method.invoke(Method.java:507)
04-02 13:06:40.563: E/AndroidRuntime(925): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
04-02 13:06:40.563: E/AndroidRuntime(925): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
04-02 13:06:40.563: E/AndroidRuntime(925): at dalvik.system.NativeStart.main(Native Method)
04-02 13:06:40.563: E/AndroidRuntime(925): Caused by: java.lang.NullPointerException
04-02 13:06:40.563: E/AndroidRuntime(925): at com.testcom.myapp.MyappActivity.onPause(MyappActivity.java:119)
04-02 13:06:40.563: E/AndroidRuntime(925): at android.app.Activity.performPause(Activity.java:3851)
04-02 13:06:40.563: E/AndroidRuntime(925): at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1191)
04-02 13:06:40.563: E/AndroidRuntime(925): at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2341)
04-02 13:06:40.563: E/AndroidRuntime(925): ... 12 more
看看这里可能帮助你您的问题:
How to mute and unmute it on the onPause and onResumee
这样,您可以暂停和启动它的地方停了下来。
像这样:
全球:
MediaPlayer ourSong;
在你的OnCreate
ourSong = MediaPlayer.create(yourActivity.this, YourSong);
ourSong.setLooping(true);
ourSong.start();
在暂停功能
@Override
protected void onPause()
{
super.onPause();
if(ourSong.isPlaying)
ourSong.pause(); //stop the sound
}
@Override
protected void onResume()
{
super.onResume();
ourSong.start();
}
我正在寻找只按HOME/BACK时停止音乐,当用户再次访问时,它将从头开始。 – Si8
好的,但如果该活动未调用onStop(),则您的音乐不会再播放。 –
你也应该覆写OnResume() –
只是放在onPause()中,因为像onStop()/ onDestroy()之类的所有方法都是在onPause()之后调用的,所以只是Activity的生命周期流,所以只写onPause。
@Override
protected void onPause()
{
if(ps.isPlaying)
pS.stop(); //stop the sound
super.onStop();
finish(); //kill the thread
}
OK像需要实施背面和home键然后实现的onkeyup/onKeyDown和检测的关键,并执行暂停不同的事/为你停止当前播放曲目
首先:什么是你的logcat的输出?它应该直接指向你的FC的来源。其次:我希望这是一个错字,但是你在重写onPause()时调用super.onStop()!这是不对的,你必须在onPause覆盖中调用super.onPause()。此外:为什么你在onPause/onStop上完成你的活动? – AgentKnopf
我改为super.onPause(); – Si8
好的,我正在寻找的是HOME或BACK按钮,如果正在播放,它应该停止播放音乐。 – Si8