Sto lavorando all'applicazione mobile sviluppata su cordova. Voglio implementare un servizio in background che funziona come una connessione open socket sincronizzando il database locale con quello remoto e notificando gli utenti su nuovi push remoti, ecc. Il punto è che ho implementato questo codice in javascript ma voglio eseguirlo in background.Come eseguire il plug-in Cordova nel servizio in background Android?
Ho cercato internet per un plug-in del servizio di sfondo cordova.
- katzer/cordova-plugin-background-mode
- jocull/phonegap-backgroundjs
-
Il migliore che credo sia red-folder ma è solo per Android e non mi permette di scrivere javascript da eseguire in background. ma basta scambiare json tra java e javascript.
Ho letto alcune tematiche circa servizio in background in Android questi sono quelli utili che ho trovato:
- create-a-service-on-android-with-phonegap-application
- simple-android-service-example-code-description-start-stop-service
- android-using-webview-outside-an-activity-context
Così ho iniziato a scrivere Cordova plugin (principalmente su Android) per eseguire il ja codice vascript in background. Ho creato una webview dal servizio in background per eseguire il javascript da esso. Funziona bene quando eseguo il javascript normale, ma quando si tratta di plug-in cordova js non riesce ad esempio il dispositivo device.uuid
dà null
.
Questo è il codice di servizio Java:
public void onStart(Intent intent, int startId) {
Toast.makeText(this, "My Happy Service Started", Toast.LENGTH_LONG).show();
createBackGroundView();
super.onStart(intent,startId);
}
public void createBackGroundView(){
WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
LayoutParams params = new WindowManager.LayoutParams(
android.view.ViewGroup.LayoutParams.WRAP_CONTENT,
android.view.ViewGroup.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
PixelFormat.TRANSLUCENT
);
params.gravity = Gravity.TOP | Gravity.LEFT;
params.x = 0;
params.y = 0;
params.width = 200;
params.height = 200;
LinearLayout view = new LinearLayout(this);
view.setLayoutParams(new RelativeLayout.LayoutParams(
android.view.ViewGroup.LayoutParams.MATCH_PARENT,
android.view.ViewGroup.LayoutParams.MATCH_PARENT
));
WebView wv = new WebView(this);
wv.setLayoutParams(new LinearLayout.LayoutParams(
android.view.ViewGroup.LayoutParams.MATCH_PARENT,
android.view.ViewGroup.LayoutParams.MATCH_PARENT
));
view.addView(wv);
wv.getSettings().setJavaScriptEnabled(true);
wv.setWebChromeClient(new WebChromeClient());
wv.loadUrl("file:///android_asset/www/background.html");
wv.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedError(final WebView view, int errorCode,
String description, final String failingUrl) {
Log.d("Error","loading web view");
super.onReceivedError(view, errorCode, description, failingUrl);
}
});
windowManager.addView(view, params);
}
Aggiornamento Non v'è alcun errore nel logcat. Così ho provato a scrivere l'oggetto dispositivo sullo schermo e questo è quello che ottengo:
document.write(JSON.stringify(window.device))
E questo è il risultato:
{ available : false,
plaform : null ,
version : null ,
uuid : null ,
cordova : null ,
model : null
}
Ho provato a sostituire lo standard webView
con cordovaWebView
Ma lo stesso risultato è dato.
//WebView wv = new WebView(this); Commented out
CordovaWebView wv = new CordovaWebView(this);
Qualsiasi aiuto su questo problema?
utile questo aiuto: http://stackoverflow.com/questions/21505369/phonegap-keep-running-on-android-after-onpause/21565628#21565628 – kirchberger
Nel mio caso il javascript è attivo e continua a funzionare ma il problema è nell'esecuzione di ** cordova plugin js ** in background. – mehsen
puoi pubblicare un errore o un registro – kirchberger