2014-01-15 359 views
1

我只想在主頁按鈕(應用程序發送到後臺)時才運行代碼。我嘗試過使用生命週期方法,但問題在於,當其他對話/活動啓動時,它們也會被執行。我只想檢查應用程序是否發送到後臺。我怎樣才能做到這一點?如何按下主頁按鈕時執行代碼?

+0

爲什麼你想這樣做? –

+0

我有一個密碼保護的活動..如果用戶調用此活動,然後單擊主頁按鈕並再次調用該應用程序,則會顯示相同的活動。我想確保如果用戶調用這個活動,他應該給他的密碼,當他在這個活動中,並按下主頁按鈕並再次啓動該應用程序時,活動必須重新開始並且不顯示相同的活動。因爲我可以使用密碼進入這個活動,然後可以將活動發送到背景,然後如果其他人使用我的手機並啓動應用程序,他可以看到密碼保護活動 – androidBeginner

回答

0

嘛,因爲你正在寫的代碼,你可以設置一些布爾標誌,當你開始明確另一acitivty,檢查,當你的活動經過的onPause()...

,如果他們是假的,這意味着有人別的是暫停你的活動。

也許不是最優雅的解決方案,但它會工作,如果這是你唯一的問題。

+0

我正在使用布爾標誌,但我可以'使用onePause(),因爲當我使用應用程序並啓動另一個活動時,也會調用onPause()..例如,我不想在使用應用程序時總是輸入密碼,但只有當應用程序發送到後臺時再次啓動 – androidBeginner

+0

您需要檢查'onPause()'中的布爾值。如果它是假的,你知道另一個活動沒有開始。 – Tunga

2

onOptionsItemSelected(MenuItem item);,檢查是否點擊的產品home鍵:

編輯:

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
     case android.R.id.home: 
      finish(); 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
+0

sry無法正常工作......我只想按主頁按鈕時完成當前活動 – androidBeginner

+0

您如何設置您的ActionBar?發佈一些代碼,我們可能會更好地幫助你。如果您嘗試在按Home按鈕時完成當前活動,只需在case語句中添加finish()。 – Submersed

+0

是的,我已經嘗試過,但它沒有奏效。它沒有檢測到homebutton事件。覆蓋onUserLeaveHint()爲我工作 – androidBeginner

0

你可以有一個跟蹤系統(基本上是一個計數器)知道,當你的活動之一恢復並暫停,從而讓你知道你的任何活動是否開放。

這樣你就可以知道你的應用是否「打開」。但這不僅適用於主頁按鈕,還適用於後退按鈕(最後關閉應用程序)或甚至從通知欄中打開另一個應用程序。

0

Android操作系統將殺死您的應用程序以釋放資源,它不會一直呆在後臺。如果您希望應用繼續在後臺運行,請使用service

+0

你是什麼意思?我不想保持我的應用程序在後臺運行..我剛剛完成當前的活動,當應用程序在後臺發送(如果主頁按鈕被點擊) – androidBeginner

+0

我想你想讓你的應用程序在後臺運行。你的第一個問題對我來說不夠清楚,對不起。現在我明白了你真正想做的事情。好的,把finish();在onpause()方法內,因爲當用戶點擊主頁按鈕時,你的應用程序將調用onpause()方法。 – rutulPatel

2

Activity.onUserLeaveHint()如果由於用戶操作(例如按主頁按鈕或切換應用)而導致活動停止後臺,將觸發您的活動。

+0

完美,這就是我正在尋找的 – androidBeginner

+1

sry剛剛檢查...它不能正常工作......當另一個活動開始時也調用此方法 – androidBeginner

0

如果你想要做的,當按下HOME鍵和活動去的背景下,您可以覆蓋此上的活動:

@Override 
public boolean onKeyUp(int keyCode, KeyEvent event) 
{ 
    switch(keyCode) 
    { 
    case KeyEvent.KEYCODE_HOME: 

    //somthing you want to do 

    default: 
     return super.onKeyUp(keyCode, event); 

    } 
} 

我使用KeyUp事件,因爲這是當應用程序去化背景,用戶可以做一個長按,我認爲你不想在應用程序仍然打開時執行該方法。

0

這是一個作弊的答案,但我覺得它更可靠。

當您按下主頁按鈕時總是調用的一種方法是任何程序活動中包含的任何surfaceviewssurfacedestroyed方法。

把你想要執行的代碼放到那裏,讓方法指向你想要執行的另一個方法,或者讓方法觸發一個指向你想要執行的方法的標誌來完成這項工作。

相關問題