[英]Programmatically clear PhoneGap/Cordova app's cache on Android to simulate a fresh install?
這與我之前的問題“ 如何在每次安裝時在我的Android模擬器上清除應用程序的localStorage”有關? ”。
它還建立在' 如何清除Android應用緩存? '和' 如何以編程方式清除應用程序數據? ”。
上述問題均未提供適用於Android PhoneGap / Cordova應用程序的直接答案。 Igor Hrupin撰寫的 這篇博 文介紹了原生 Android應用程序環境中的情況,因此這個問題擴展到了Cordova。
我會自己發一個答案,但我是一個完整的Java菜鳥,所以請編輯改進。
剛看到這個。 它可以用一條線完成。 我不確定這是否是你想要的,但它符合我的目的,即在啟動時清除緩存
https://coderwall.com/p/aj79eg
super.clearCache(); // just add This Line
super.loadUrl("file:///android_asset/www/index.html");
我無法強制android重新加載新版本:
super.loadUrl("file:///android_asset/www/index.html");
在調用之間,所以我首先借用了你的代碼,該代碼運行得很好,除了我的應用程序編寫的所有數據都被刪除了。
一個快速簡單的解決方法是更改上面文件的URL:
super.loadUrl("file:///android_asset/www/index.html?1");
並改變背后的數字? 每次加載。 最后我補充說:
import java.util.Random;
public class MainActivity extends DroidGap {
@Override
public void onCreate(Bundle savedInstanceState) {
Random generator = new Random();
int r = generator.nextInt();
super.onCreate(savedInstanceState);
super.loadUrl("file:///android_asset/www/index.html?" + r);
}
}
現在,每次重建應用程序時,它都會刷新html文件的緩存版本。
我非常想知道如何從應用程序本身強制loadUrl進行刷新,或強制重新加載。
這個答案借用了Igor Hrupin撰寫的 這篇博文中的大量代碼。
你的Project > src > [com/org/whatever].[YourNameSpace].[ActivityNameHere] > [ActivityNameHere].java
應該看起來像普通的PhoneGap應用程序。
package [com/org/whatever].[YourNameSpace].[ActivityNameHere];
import org.apache.cordova.*;
import android.os.Bundle;
public class [ActivityNameHere] extends DroidGap {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.loadUrl("file:///android_asset/www/index.html");
}
}
我們所做的是將其更改為以下代碼。 為清楚起見,未注明的行被注釋掉,但在實現時應該取消注釋。
請記住用您自己的值替換[com/org/whatever]
, [YourNameSpace]
和多個 [ActivityNameHere]
占位符。
// package [com/org/whatever].[YourNameSpace].[ActivityNameHere];
// import org.apache.cordova.DroidGap;
// import android.os.Bundle;
import java.io.File;
import android.util.Log;
// public class [ActivityNameHere] extends DroidGap {
private static [ActivityNameHere] instance;
// @Override
// public void onCreate(Bundle savedInstanceState) {
instance = this;
[ActivityNameHere].getInstance().clearApplicationData();
// super.onCreate(savedInstanceState);
// super.loadUrl("file:///android_asset/www/index.html");
// }
public static [ActivityNameHere] getInstance() {
return instance;
}
public void clearApplicationData() {
File cache = getCacheDir();
File appDir = new File(cache.getParent());
if (appDir.exists()) {
String[] children = appDir.list();
for (String s : children) {
if (!s.equals("lib")) {
deleteDir(new File(appDir, s));
Log.i("TAG", "**************** File /data/data/APP_PACKAGE/" + s + " DELETED *******************");
}
}
}
}
public static boolean deleteDir(File dir) {
if (dir != null && dir.isDirectory()) {
String[] children = dir.list();
for (int i = 0; i < children.length; i++) {
boolean success = deleteDir(new File(dir, children[i]));
if (!success) {
return false;
}
}
}
return dir.delete();
}
// }
正如我的問題所述,我沒有Java技能,所以我從我能找到的東西中將它一起攻擊並且似乎有效。 請相應地進行編輯 - 我認為這是人們在需要時可以有效地復制和粘貼的東西,因為Android上的PhoneGap的全部意義是從Java中抽象開發人員(為了記錄,我會得到一旦我的當前項目完成,就學習。
代碼似乎有效,至少在我的情況下。 加入會很好 -
(1)的能力來調用從JS此函數,沿這些線 。
和
(2)選擇僅在第一次運行應用程序時清除緩存,這樣您就可以模擬“強制關閉”的應用程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.