这个答案借用了 Igor Hrupin 的这篇博文中的大量代码。
对于普通的 PhoneGap 应用程序,您Project > src > [com/org/whatever].[YourNameSpace].[ActivityNameHere] > [ActivityNameHere].java
应该看起来像这样。
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)仅在应用程序第一次运行时清除缓存的选项,因此您可以模拟应用程序被“强制关闭”。