Prima di iniziare Sto lavorando a un'applicazione che deve eseguire JavaScript quando l'app non è in primo piano; il problema sembra essere che quando l'app viene messa in secondo piano/la webview viene rimossa dallo schermo viene chiamato il metodo onPause della webview che per documenti fa quanto segue: "Mette in pausa qualsiasi elaborazione aggiuntiva associata a questo WebView e al suo DOM associato, plugin, JavaScript ecc. "Ripristina la visualizzazione Web Android quando viene messa in pausa dal sistema operativo/eseguire JavaScript sull'app in background?
Da quello che ho trovato fino ad ora la mia migliore scommessa sembra essere l'uso della riflessione per chiamare il metodo "onResume" della webview che dovrebbe annullare tutte queste sospensioni di processo. Con la mia attuale implementazione ottengo un'istanza di detto metodo, ma quando invocato nulla sembra accadere mentre la mia successiva chiamata JavaScript non fa nulla (badate bene che funzioni quando ho l'applicazione aperta e in primo piano).
Qualcun altro vede un problema nel mio codice o ha una soluzione per eseguire JavaScript quando la tua app è in background senza avviare completamente l'app?
messaggio push entra nel dire JavaScript deve essere eseguito in modo intento è inviata per notificare il servizio in esecuzione in background:
Intent intent = new Intent("some action");
intent.putExtra("xtifyJson", xtifyJSON.toString());
context.sendBroadcast(intent);
Nel OnReceive del mio ricevitore Broadcast, che vive nel servizio in background sempre in esecuzione:
final String stringArrayExtra = intent.getStringExtra("xtifyJson");
if (!Text.isNull(stringArrayExtra)) {
new Handler(context.getMainLooper()).post(new Runnable() {
@Override
public void run() {
try {
Log.d("Hey Dev Guy", "Message received");
JavaScriptInterface javaScriptInterface = ((SpecialApplication) getApplicationContext()).getJavaScriptInterface();
relectHiddenMethod(javaScriptInterface.getParentWebView(), "onResume");
javaScriptInterface.getParentWebView().resumeTimers();
javaScriptInterface.callBackPushReceived(new JSONObject(stringArrayExtra));
}
catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
reflectHiddenMethod metodo riflessione:
private void reflectHiddenMethod(final WebView webview, final String name) {
if (webview != null) {
try {
Method method = WebView.class.getMethod(name);
Object invoke = method.invoke(webview);
}
catch (final Exception e) {
e.printStackTrace();
}
}
}
Un po 'realted [domanda] (http://stackoverflow.com/questions/7884568/android-webview-inside-a-service). Idea principale: sposta la parte di comunicazione da JavaScript in un servizio. – Stan