当“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 
+0

首先:什么是你的logcat的输出?它应该直接指向你的FC的来源。其次:我希望这是一个错字,但是你在重写onPause()时调用super.onStop()!这是不对的,你必须在onPause覆盖中调用super.onPause()。此外:为什么你在onPause/onStop上完成你的活动? – AgentKnopf

+0

我改为super.onPause(); – Si8

+0

好的,我正在寻找的是HOME或BACK按钮,如果正在播放,它应该停止播放音乐。 – Si8

看看这里可能帮助你您的问题:

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(); 
} 
+1

我正在寻找只按HOME/BACK时停止音乐,当用户再次访问时,它将从头开始。 – Si8

+0

好的,但如果该活动未调用onStop(),则您的音乐不会再播放。 –

+1

你也应该覆写OnResume() –

你可以把PS.stop中的onPause()。

+0

onStop用于HOME和onPause用于BACK ...对吗?尝试它,它没有工作:( – Si8

+0

返回是onPause,一段时间后它会去onStop,当你点击后退按钮,然后你需要停止你的音乐,然后在onPause()只添加Ps.stop。 – Mohan

+1

这就是不一定是正确的 - 你可能想要阅读活动生命周期:http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle – Kennifer

只是放在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和检测的关键,并执行暂停不同的事/为你停止当前播放曲目

+0

这很有趣,我只是在发布之前添加了代码,它像一个魅力工作!感谢:) 所以,我可以完全取出onStop方法? – Si8

+0

我添加了你的代码,但是像以前一样,如果声音没有播放,它FC当我按HOME/BACK时。任何想法? – Si8