2013-04-02 32 views
-3

我有一个播放声音的android应用,但是当按HOME/BACK时,我希望声音停止并关闭应用,并且当用户返回到应用程序,我想再次启动该活动,而不是恢复。完美关闭Android中的应用当按HOME或BACK时

我的onPause()代码:

@Override 
protected void onPause() 
{ 
    super.onPause(); 
    if (pS.isPlaying()) { 
     pS.pause(); //stop the sound 
     finish(); 
    } 
    else 
     finish(); 
} 

当播放声音时,我打HOME或后面我的应用程序FC和我张贴下面的日志:

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 

注意:如果正在播放声音并且按HOME/BACK,但在按HOME/BACK时没有声音播放应用FC,则该应用会关闭。我该如何解决这个问题?

回答

4

尝试:

@Override 
protected void onPause() 
{ 
    super.onPause(); 
    if (pS!= null && pS.isPlaying()) { 
     pS.pause(); //stop the sound 
     finish(); 
    } 
    else 
     finish(); 
} 

我猜测,最有可能在没有播放声音时您pS变量为空,因此您在使用时,它得到一个NPE。

+0

WOW ......不知道为什么,我没有实现对PS!= NULL!但是你的代码像魅力一样工作!谢谢拉格哈夫! – Si8

0

没有必要等待在活动周期的onPause()达之前ü可以完成()的活动

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) 
{  

if(keyCode == KeyEvent.KEYCODE_HOME||keyCode == KeyEvent.KEYCODE_BACK) 
{ 
    if (ps!=null) { 
    pS.pause(); //stop the sound 
    finish(); 
} 
else 
    finish(); 
} 
}); 
+0

我可以添加这个和onPause吗?或者onPause会照顾你在这里发布的内容吗?谢谢。 – Si8

+0

没有一个onkeyDown的方法被覆盖,尝试右键 - >源 - >覆盖/实现方法 - >选择onkeydown(),当你按下home或back按钮时会自动调用 –

+0

所以在我的主类中都有Override? – Si8

相关问题