簡體   English   中英

如何從最近的應用程序列表中刪除應用程序?

[英]How to remove application from recent application list?

我猜 Android 不會讓人們這樣做,因為他們認為他們對任務/應用程序有完美的處理能力。 但是,在我的情況下,我確實需要這樣做。

我有一個活動 A 作為我的應用程序的入口點。 在那個活動中,它讀取偏好並決定開始哪個活動,比如說 B 或 C。之后,它自己完成。 因此,活動 A 永遠不會出現在用戶面前。

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

如果用戶僅從應用程序啟動器輸入我的應用程序,則一切正常。 但是,我發現用戶也可以通過長按主頁進入我的應用程序並從最近的應用程序列表中選擇它,如果他最近打開過它。 當用戶這樣做時,它會跳過 A 並直接轉到 B 或 C。我沒有對它們進行檢查,因此在我嘗試訪問 SD 卡時拋出異常,並彈出強制關閉對話框。

我可以簡單地將我的支票移到 B 和 C 來解決這個問題。 但在未來,從A開始的活動數量會增加。 如果有 6 個,我需要將此支票復制到 6 個位置。 不用說,這看起來非常難看,而且是維護的噩夢。

因此,最好的解決方法應該是在卸載 sdcard 時從最近的應用程序列表中刪除我的應用程序。 但是,我找不到如何執行此操作。 即使殺死進程或使用ActivityManager.restartPackage,它仍然出現在列表中。 誰能告訴我如何從列表中刪除它?

試試

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

在您的AndroidManifest.xml的活動聲明中。

其他屬性可以幫助您的活動與同一包中的其他活動隔離。

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

只需在清單文件的活動標簽中添加android:excludeFromRecents="true" ..很簡單

您需要在 AndroidManifest.xml 的 Launcher Activity 中設置以下代碼:

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

或從

intent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);

並且也在 AndroidManifest.xml 中

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

將標簽設置為空將使此活動不會顯示在最近的應用程序列表中。

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

選項 1:

在 B 和 C 上添加:

protected void onPause() {
  finish();
}

選項 2:

AndroidManifest向 B 和 C 添加以下內容:

android:noHistory= "true"

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

無論如何,我認為它不會解決您的問題。 如果用戶在 Activity B 上點擊主頁,然后從主頁選擇您的應用程序,它將再次啟動 Activiy B。

有多種方法可以解決實際問題。 一個簡單的方法可能是創建一個執行 SD 卡檢查的基本活動,並從它擴展所有活動。 這樣支票只在一個地方。

好的,我知道它可以在 2.3.4 中完成。 打開應用程序 Toddler Lock 時會清除最近的應用程序列表,因此當您“鎖定”手機時,如果您長按主頁鍵,列表將變為空白。 不幸的是,我還沒有找到如何去做。 因此,對於正在查看和閱讀 postf 的人來說,這不可能,不要放棄。 我確定不是。

如果您想在按鈕上退出應用程序,請使用以下代碼:

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);

試試這個,它將完成所有活動並從最近的應用程序中刪除應用程序

private fun killCurrentApp() {
    val am = this.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager?
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        val appTasks = am!!.getAppTasks()
        if (appTasks.size > 0) {
            val appTask = appTasks.get(0)
            appTask.finishAndRemoveTask()
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM