簡體   English   中英

以編程方式清除應用緩存?

[英]Clearing app cache programmatically?

我想編寫一個實用程序,用戶可以在其中選擇一組已安裝的應用程序並清除其數據緩存,例如您可以使用內置的“設置” - >“應用程序”設置屏幕和“清除緩存”按鈕手動執行此操作。

如何訪問每個應用程序擁有的緩存數據量並以編程方式清除這些緩存?

這里給出的答案是錯誤的,有市場應用程序具有程序清除所有應用程序緩存功能。 此外,文檔中還包含以下內容:

public static final String CLEAR_APP_CACHE

從以下版本開始:android中的API Level 1允許應用程序清除設備上所有已安裝應用程序的緩存。 常數值:

 android.permission.CLEAR_APP_CACHE

請注意“所有已安裝的應用程序部分”,以及除標准用戶權限之外不需要任何超級用戶訪問權限或特殊權限的事實。

我在這里發帖是因為我要求可交付成果每24小時在店內演示電話中清除所有應用程序緩存,並且我正在試圖弄清楚如何正確使用它。 我知道解決方案的一部分是獲得此權限,我也知道如何在設備上找到所有已安裝的應用程序,我正在努力實際刪除緩存。 我的問題是其他應用程序緩存讀取為不包含任何文件(盡管有內容),我懷疑因為我沒有讀取權限使列表文件調用。

普通的SDK應用程序無權訪問,更不用說修改其他應用程序的緩存,只不過他們有權​​破解您的文件。

這可能適用於以root用戶身份運行應用程序的root電話,在這種情況下,您必須根據應用程序的軟件包名稱手動構建路徑。

您應該在清單中擁有此權限:

<uses-permission android:name="android.permission.CLEAR_APP_CACHE"/>

之后,您可以使用PackageManager清除所有程序的緩存:

PackageManager  pm = getPackageManager();
// Get all methods on the PackageManager
Method[] methods = pm.getClass().getDeclaredMethods();
for (Method m : methods) {
    if (m.getName().equals("freeStorage")) {
        // Found the method I want to use
        try {
            long desiredFreeStorage = 8 * 1024 * 1024 * 1024; // Request for 8GB of free space
            m.invoke(pm, desiredFreeStorage , null);
        } catch (Exception e) {
            // Method invocation failed. Could be a permission problem
        }
        break;
    }
}

這要求Android清除足夠的緩存文件,以便有8GB空閑。 如果你設置這個數字足夠高,你應該達到你想要的(Android將刪除緩存中的所有文件)。 當您調用freeStorage()時,它會檢查存儲量(在這種情況下為8GB)是否可用於緩存文件。 如果沒有,它會首先刪除最舊的文件,從應用程序的緩存目錄中刪除文件。 它會繼續刪除文件,直到沒有任何文件要刪除,或者它釋放了您請求的存儲量(在這種情況下為8GB)。

暫無
暫無

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

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