Оригинальный постер поместил это как обновление вопроса, но это действительно ответ, поэтому я перевожу его сюда:
Все остальное содержание от оригинального постера :
Благодаря предложению Роберта, вот что я делаю сейчас:
На стороне JS я слушаю кешированное событие.
Когда он запускается, я вызываю метод на своем интерфейсе JS, который создает файл «cachepresent.dummy» в папке кэша Android. Таким образом, я мог узнать, заполнен ли кеш или нет на стороне Android, проверив, существует ли этот файл.
Используя тот же механизм, я очищаю всю папку кэша Android, когда запускается событие updateready.
Вот код Java:
private class JsInterface {
public JsInterface() {}
@SuppressWarnings("unused")
public void cached() {
File f = new File("/data/data/"+getPackageName()+"/cache/cachepresent.dummy");
FileWriter w;
try {
w = new FileWriter(f);
w.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
private void DeleteRecursive(File f) {
if (f.isDirectory()) {
for (File child : f.listFiles()) {
DeleteRecursive(child);
}
}
f.delete();
}
@SuppressWarnings("unused")
public void clearCache(){
File f = new File("/data/data/"+getPackageName()+"/cache");
DeleteRecursive(f);
}
}
...
//add the javascript interface to the webview
jsInterface = new JsInterface();
v.addJavascriptInterface(jsInterface, "JsBridge");
//Check if the cache is complete
File cachePresentFile = new File("/data/data/"+getPackageName()+"/cache/cachepresent.dummy");
boolean cachePresent = cachePresentFile.exists();
И код JS:
function cacheReload() {
var cache = window.applicationCache;
try{
cache.update();
}
catch(e){
//android 2.2 does not seem to support this :'(
console.log("JS Exception: " + e);
}
cache.addEventListener("updateready",
function () {
JsBridge.clearCache();
cache.swapCache();
window.location.reload();
}
);
cache.addEventListener("cached",
function () {
JsBridge.cached();
}
);
}
Кстати, я уверен, что есть более разумный способ добиться этого с помощью HTML5 LocalStorage.