2010-09-21 111 views
50

我想Android不會讓人們這樣做,因爲他們認爲他們對任務/應用程序有完美的處理能力。不過,我真的需要在我的情況下這樣做。如何從最近的應用程序列表中刪除應用程序?

我有一個活動A充當我的應用程序的入口點。在該活動中,它讀取首選項並決定開始哪個活動,比如說B或C.之後,它自行完成。所以,活動A永遠不會顯示給用戶。

我的應用程序將東西存儲在SD卡上,並不斷讀取它。所以,當SD卡卸載時,我需要向用戶顯示一條消息,表明sdcard不可用,而不是打開B或C.我在A中設置了一個檢查,以便在sdcard不可用時顯示該消息。當顯示該消息時,不會嘗試啓動B或C.

東西完美地工作,如果用戶只輸入從應用程序啓動我的應用程序。但是,我發現用戶也可以通過長時間按住家來進入我的應用程序,並從最近的應用程序列表中選擇它,如果他最近打開了它。當用戶這樣做時,它跳過A並直接進入B或C.我沒有在它們兩個中的檢查,所以當我嘗試訪問SD卡時拋出異常,並強制關閉對話框彈出。

我可以簡單地將我的支票移到B和C上來解決這個問題。但未來,從A開始的活動數量將會增加。如果有6個,我需要把這張支票複製到6個地方。不用說,這看起來非常醜陋,而且是一個維護噩夢。

所以,最好的解決應該從最近的應用程序列表中,當SD卡被刪除uunmounted我的應用程序。但是,我無法找到如何做到這一點。即使殺死進程或使用ActivityManager.restartPackage,它仍然會出現在列表中。任何人都可以告訴我如何從列表中刪除它?

+5

'我真的需要在我的情況下這樣做'然後你的設計是錯誤的 – Falmarri 2010-09-21 22:19:36

回答

182

嘗試

<activity android:name=".MainActivity" 
     android:excludeFromRecents="true" ... 

AndroidManifest.xml的活動宣言。

+1

謝謝你!那就是訣竅! – Jakob 2012-10-30 22:50:16

+0

超棒的男人!幫助了很多:) – nithinreddy 2013-02-18 11:52:31

+2

這應該被標記爲正確的答案。 – 2013-09-24 14:16:12

4

我不建議這樣做,但我會嘗試以下選項:

選項1:

在B和C地址:

protected void onPause() { 
    finish(); 
} 

選項2:

添加到B和C如下在AndroidManifest

android:noHistory= "true" 
4

從最近的應用程序列表中刪除應用程序可能是不可能的,並且絕對不是最佳解決方案。這隻會讓期望所有應用程序行爲相似的用戶感到困惑。

無論如何,我不認爲它會解決您的問題。如果用戶在活動B時點擊回家,然後從主頁選擇您的應用程序,它將再次啓動活動B.

有很多方法可以解決真正的問題。一個簡單的方法可能是創建一個執行SD卡檢查的基本活動,並讓您的所有活動都從其中延伸。這樣的支票只在一個地方。

2

好的,我知道它可以在2.3.4中完成。應用程序幼兒鎖定時打開清除最近的應用程序列表,以便當您「鎖定」您的手機,如果你長按Home鍵列表是空白的。不幸的是,我還沒有找到如何去做。所以對於任何正在閱讀和閱讀postf的人來說,這是不可能的,不要放棄。我確定你不是。

16

其他屬性可以幫助您的活動在同一個包中的其他活動區分開添加android:excludeFromRecents="true"在活動的標籤。

<activity 
android:name=".aActivity" 
android:excludeFromRecents="true" 
android:taskAffinity="" 
android:launchMode="singleInstance"> 
11

您需要設置的AndroidManifest.xml:

<activity> 
    ... 
    android:excludeFromRecents="true" 
    ... 
</activity> 

intent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); 

啓動這一活動,並在AndroidManifest.xml

<activity> 
    ... 
    android:label="" 
    ... 
</activity> 

設置標籤爲空將讓這個活動不會顯示在最近的應用程序列表中。

+1

非常感謝,最近列表中顯示活動。經過數週的搔抓,我終於從答案中找到了問題。 – 2015-07-27 15:40:04

0

如果你想上的按鈕點擊使用此代碼退出應用:

Intent intent = new Intent(Intent.ACTION_MAIN); 
intent.addCategory(Intent.CATEGORY_HOME); 
startActivity(intent); 

殺完整的應用程序,並從Runningapp列表中刪除它通過它的PID終止該應用(其討厭)...使用此線上面的代碼之前。

int pid = android.os.Process.myPid(); 
android.os.Process.killProcess(pid);