2011-03-07 105 views
3

我想在用戶按下主頁按鈕時關閉活動。爲此,我使用下面的代碼:如何在主頁按鈕被按下時終止活動?

public void onPause() { 
    super.onPause(); 
    this.finish(); 
} 

它工作正常。但是,如果用戶按下「後退」按鈕,而不是「主頁」,它也會殺死活動。我希望後退按鈕能夠像往常一樣執行,即它應該讓用戶參與之前的活動。有什麼想法嗎?

以下是我的活動類的代碼:

public class HomeScreen extends Activity { 
    /** Called when the activity is first created. */ 
     private Button btn_play; 
     private MediaPlayer mp = new MediaPlayer(); 
     private static int AUDIO_NO = 1; 
     public static String isVideoSelected = ""; 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 
      try{ 
       btn_play = (Button)findViewById(R.id.btn_play); 
       btn_play.setOnClickListener(btn_listener); 
       if(isVideoSelected!="") isVideoSelected=""; 
       Handler handler = new Handler(); 
       handler.postDelayed(new Runnable() { 
        @Override 
        public void run() { 
         // TODO Auto-generated method stub 
         play_audio(AUDIO_NO); 
        } 
       }, 1000); 
      } catch(Exception e) { 

      } 
     } 
     private void play_audio(int slno) { 
      try { 
       if(slno == 1) mp = MediaPlayer.create(getBaseContext(), R.raw.audio_1); 
       else if(slno == 2) mp = MediaPlayer.create(getBaseContext(), R.raw.audio_2); 
       mp.setLooping(false); 
       mp.setOnCompletionListener(audio_listener); 
       mp.start(); 
      } catch(Exception e) { 
       // do nothing 
      } 
     } 
     private MediaPlayer.OnCompletionListener audio_listener = new MediaPlayer.OnCompletionListener() { 
      @Override 
      public void onCompletion(MediaPlayer mp) { 
       // TODO Auto-generated method stub 
       try{ 
        mp.release(); 
        if(AUDIO_NO == 1) { 
         play_audio(2); 
         AUDIO_NO++; 
        } 
       } catch(Exception e) { 

       } 
      } 
     }; 
     private View.OnClickListener btn_listener = new View.OnClickListener() {   
      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       try{ 
        if(mp.isPlaying()) { 
         mp.stop(); 
         mp.release(); 
        } 
        Intent intent = new Intent(getApplicationContext(), ScreenTwo.class); 
        startActivity(intent); 
       } catch(Exception e) { 

       } finally { 
       } 
      } 
     }; 
     public void onUserLeaveHint() { 
      super.onUserLeaveHint(); 
      try{ 
       if(mp.isPlaying()) { 
        mp.stop(); 
        mp.release(); 
       } 
       btn_play = null; 
      } catch(Exception e) { 

      } 
     } 
     @Override 
     public void onDestroy() { 
      super.onDestroy(); 
      try{ 
       if(mp.isPlaying()) { 
        mp.stop(); 
        mp.release(); 
       } 
       btn_play = null; 
      } catch(Exception e) { 

      } 
     } 
    } 

回答

2

我認爲你需要在這裏提供更多關於你的動機的信息:爲什麼你想要在家庭印刷機上殺死你的活動而不是讓系統管理它?你試圖完成的事情不是自己發生的?如果這只是不想讓用戶切換回特定活動的問題,請查看可用於task stack的各種標誌。

編輯:在這種情況下,您可能導致您的全部異常處理的問題。嘗試將這些行移到finally子句中,而不是在try中,並讓您的異常處理程序至少記錄它正在捕獲的異常(Log.e("tag", "Exception caught; ignoring:", e))。 Catch-alls通常是不好的編程習慣,尤其是如果你至少沒有記錄異常,那麼你可以看到出現了什麼問題。

 Intent intent = new Intent(getApplicationContext(), ScreenTwo.class); 
     startActivity(intent); 
+0

@ Yoni Samlan我在主屏幕上按下了一個名爲「play」的按鈕,將用戶帶到第二個屏幕。我也在主屏幕中播放背景音頻。現在,只要用戶按下主頁按鈕退出應用程序並再次回到主屏幕,「播放」按鈕不起作用。日誌條目如下所示:'03-07 19:47:36.062:WARN/AudioFlinger(3256):爲221 msecs寫入阻塞,170個延遲寫入,線程0xbec0'。所以我試圖殺死家庭印刷機上的活動。 – Sourav 2011-03-07 14:18:35

+0

如果用戶按下「返回」按鈕退出應用程序並再次啓動,則主屏幕上的「播放」按鈕可以正常工作,而不是首頁。 – Sourav 2011-03-07 14:26:49

+0

日誌可能比這更多嗎?但是如果您希望跨越活動邊界播放音樂,則應該考慮使用服務播放音樂。這裏還缺少大量的信息 - 例如,您現在如何播放音頻?媒體播放器?的Soundpool? – 2011-03-07 20:05:54

0

onPause()被稱爲隨時在用戶離開你的活動,以便不調用完成()的地方。此外,我不確定您是否可以覆蓋主頁按鈕,或者如果這是您真的應該做的事情。

+0

僅供參考谷歌還沒有實施任何手段來覆蓋主頁按鈕,由於安全方面的原因,但你可以設計自己的主屏幕應用程序實現它(但這不是建議的方式得到公正「的onPause」行動) – 100rabh 2011-03-07 14:15:44

相關問題