2013-04-02 36 views
1

我創建了一個播放聲音文件的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

回答

1

看看這裏可能幫助你您的問題:

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() –

1

你可以把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

1

只是放在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

相關問題