3 回答

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超13個(gè)贊
根據(jù)JM Lord的評(píng)論,這個(gè)答案可能無(wú)法滿足Lollipop及以上設(shè)備的要求。請(qǐng)參閱Android L中的getRunningTasks替代方案
雖然,這是一個(gè)老問(wèn)題,但大多數(shù)答案在API級(jí)別17及以上版本中對(duì)我不起作用。我正在回答最終為我工作的事情。我嘗試了很多方法,但沒(méi)有一個(gè)像今天一樣工作。我試過(guò)答案
在Android上按下主頁(yè)按鈕時(shí)的調(diào)用方法,
在android和中檢測(cè)主頁(yè)按鈕按下
覆蓋主頁(yè)按鈕 - 如何擺脫選擇?。要點(diǎn)是Home就像一個(gè)緊急逃生按鈕。所以你不能覆蓋它,但可以在某些方面檢測(cè)它。
我試過(guò)的一些(包括上面的答案)但沒(méi)有用的是:
keyCode==KeyEvent.KEYCODE_HOME
如上所述以多種方式使用?,F(xiàn)在,如果您閱讀了KeyEvent.KEYCODE_HOME的文檔 ,那就說(shuō)明了這一點(diǎn)This key is handled by the framework and is never delivered to applications
。所以它現(xiàn)在不再有效了。我試過(guò)用
onUserLeaveHint()
。文件說(shuō):當(dāng)活動(dòng)即將作為用戶選擇的結(jié)果進(jìn)入后臺(tái)時(shí),被稱為活動(dòng)生命周期的一部分。例如,當(dāng)用戶按下Home鍵時(shí),將調(diào)用onUserLeaveHint(),但是當(dāng)傳入的電話呼叫導(dǎo)致呼入時(shí)Activity自動(dòng)被帶到前臺(tái)。
問(wèn)題在于,當(dāng)你
Activity
從你正在調(diào)用的活動(dòng)中啟動(dòng)一個(gè)方法時(shí),也會(huì)調(diào)用該方法onUserleaveLint()
,就像我的情況一樣。有關(guān)更多信息,請(qǐng)參閱Android onBackPressed / onUserLeaveHint問(wèn)題。所以它不確定它只能通過(guò)按下主頁(yè)按鈕來(lái)調(diào)用。打電話
onStop()
。當(dāng)活動(dòng)出現(xiàn)在現(xiàn)有活動(dòng)之上并完全覆蓋它時(shí),也可以調(diào)用它。所以這也行不通。
最后,以下內(nèi)容對(duì)我有用:
眼看如何檢查當(dāng)前正在運(yùn)行的應(yīng)用程序在Android中?你可以說(shuō),如果你的是最近的任務(wù),長(zhǎng)按主頁(yè)按鈕顯示,然后它被發(fā)送到后臺(tái)。
因此,在您onPause()
嘗試檢測(cè)按下主頁(yè)按鈕的活動(dòng)中,您可以檢查應(yīng)用程序是否已發(fā)送到后臺(tái)。
@Overridepublic void onPause() { if (isApplicationSentToBackground(this)){ // Do what you want to do on detecting Home Key being Pressed } super.onPause();}
用于檢查您的應(yīng)用是否是最近發(fā)送到后臺(tái)的應(yīng)用的功能:
public boolean isApplicationSentToBackground(final Context context) { ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); List<RunningTaskInfo> tasks = am.getRunningTasks(1); if (!tasks.isEmpty()) { ComponentName topActivity = tasks.get(0).topActivity; if (!topActivity.getPackageName().equals(context.getPackageName())) { return true; } } return false;}
感謝@idish指出不要忘記在清單中包含以下權(quán)限:
<uses-permission android:name="android.permission.GET_TASKS" />
我不確定這是否有任何缺點(diǎn),但它對(duì)我有用。希望有一天能幫助某人。
PS:如果你在使用FLAG_ACTIVITY_NO_HISTORY
flag 啟動(dòng)的Activity中使用此方法,那么這將無(wú)用,因?yàn)樗鼤?huì)檢查最近的歷史記錄以確定是否Home
單擊了按鈕。

TA貢獻(xiàn)2065條經(jīng)驗(yàn) 獲得超14個(gè)贊
您可以通過(guò)Activity.onUserLeaveHint()檢測(cè)HOME按鈕按下。在兩種情況下調(diào)用此方法; 當(dāng)用戶按下HOME時(shí)以及啟動(dòng)新活動(dòng)時(shí)。確保以某種方式區(qū)分兩者。
- 3 回答
- 0 關(guān)注
- 357 瀏覽
添加回答
舉報(bào)