2011-07-20 85 views
0

我正在開發一個音樂應用程序。我有一個Activity我有一個列表與軌道。我可以選擇一首曲目,然後移至其他活動以播放所選曲目。我也有一個Service類,當我按下home鍵時,我希望它啓動服務(在後臺播放音樂)並移動到主屏幕。Android:我怎樣才能趕上主頁按鈕

此外,我有方法OnBackPressed()爲了移動到以前的Activity

如何,我可以攔截主頁按鈕?謝謝,你的答案。

+0

也許這個主題將有助於你http://stackoverflow.com/questions/5376501/how-to-control-home-button-in-android但你可以超載onPause()來實現你想要的 – gregory561

回答

3

而不是抓住主頁按鈕按下,你可能想要充實一點android的生命週期,並使用onPause()來代替。如果您重寫活動的onPause()方法以啓動服務,則每當用戶暫時離開活動即「回家」時,即可獲得所需的內容,而無需捕獲所有按鈕。

如果您希望服務在用戶離開活動並開始轉到其他應用程序時啓動,則生命週期就是您的朋友。您可能想要考慮當用戶收到電子郵件通知並以這種方式離開您的應用程序時發生的情況。你是否也想開始服務?用戶沒有點擊主頁按鈕,所以你的服務不會啓動,但他們確實離開你的應用程序。你想在這種情況下開始服務嗎?

聽起來好像您希望服務在用戶離開該活動時開始,因此請注意覆蓋onPause()(如果是這種情況)。

更多關於Android的生命週期中的位置:

http://developer.android.com/reference/android/app/Activity.html

所有你需要的是添加這個方法:

@Override 
protected void onPause(){ 
    <start your service here> 
} 

編輯:該給一個嘗試,作爲一種解決方法無法攔截主頁按鈕,設置爲back_flag

public class Your_Activity extends Activity { 
    private boolean back_flag = false; 

    . 
    . 
    . 

    public void onBackPressed(){ 
     back_flag = true; 
     <whatever else you have in onBackPressed()> 
    } 

    @Override 
    protected void onPause(){ 
     if(!back_flag){ 
      <start your service> 
     } 
     back_flag = false; 
     super.onPause(); 
    } 
} 

再一次,如果它沒有註冊房屋,這是我目前唯一能想到的唯一工作。

+0

謝謝,我將嘗試這一點,但我認爲,當我按回按鈕(爲了移動到上一個活動),再次調用onPause()方法... – Tim

+0

說明:你想要服務啓動時,用戶點擊後退按鈕?或者你是否說,即使它已經運行,當你點擊後退按鈕時,該服務會再次被調用? – Otra

+0

當我按HOME按鈕時,我想要服務啓動,當我按BACK按鈕時,我想要移到上一個活動。 – Tim

1

Android被設計爲不允許您的應用程序像打開後退按鈕一樣中斷主頁按鈕。這是一個「按設計工作」的功能。後退按鈕可以使用onKeyDown捕捉,但家庭不會。

您可以做的唯一的事情就是傾聽HOME意圖。在你的清單中添加一個塊這樣的:

<intent-filter> 
    <action android:name="android.intent.action.MAIN" /> 
    <category android:name="android.intent.category.HOME" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
</intent-filter> 

現在,這裏的東西...當用戶在安裝應用程序後,點擊主頁按鈕,Android將會彈出一個「你有什麼想做的事」,他們可以將默認設置爲其默認主屏幕或應用程序。在他們選擇一個默認值後,他們再也看不到該選擇器。

正如您所看到的,除了主屏幕替換應用程序之外,其他任何功能都無用。

確保您完全測試任何其他解決方法,如OnPause建議。例如,如果屏幕超時,您的應用是否會按預期執行?