Come creare plugin in phonegap per eseguire l'applicazione in background?

Ho creato il plugin per il servizio di background (per eseguire l'applicazione in background) in phonegap.

ecco il mio codice java per il plugin:

  • Phonegap AJAX POST di domini multi-dominio non funziona su Android
  • Come aprire le impostazioni wifi su Nook / NookColor
  • NumberPicker non funziona con la tastiera
  • PhoneGap è lento o è un bug?
  • Phonegap come scaricare e aprire il file pdf in app android
  • Come faccio a rilevare l'input di touch su Android?
  • public class BackgroundService extends Plugin { @Override public PluginResult execute(String action, JSONArray args, String callbackId) { PluginResult.Status status = PluginResult.Status.OK; String result = ""; try { if (action.equals("onCreate")) { this.onCreate(); } else if (action.equals("onBind")) { Intent intent = null; this.onBind(intent); } else if (action.equals("onDestroy")) { this.onDestroy(); } else if (action.equals("onStart")) { Intent intent = null; this.onStart(intent,args.getInt(1)); } else if (action.equals("onUnbind")) { Intent intent = null; this.onUnbind(intent); } return new PluginResult(status, result); } catch(JSONException e) { return new PluginResult(PluginResult.Status.JSON_EXCEPTION); } } public void onCreate() { // TODO Auto-generated method stub } public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); } public void onStart(Intent intent, int startId) { // TODO Auto-generated method stub //super.onStart(intent, startId); } public boolean onUnbind(Intent intent) { // TODO Auto-generated method stub } public void onPause() { super.webView.loadUrl("javascript:navigator.BackgroundService.onBackground();"); } public void onResume() { super.webView.loadUrl("javascript:navigator.BackgroundService.onForeground();"); } } 

    e il mio file js è:

     function BackgroundService() { }; BackgroundService.prototype.create = function() { PhoneGap.exec(null, null, "BackgroundService", "onCreate", []); }; BackgroundService.prototype.destroy = function() { PhoneGap.exec(null, null, "BackgroundService", "onDestroy", []); }; BackgroundService.prototype.start = function(intent,startId) { PhoneGap.exec(null, null, "BackgroundService", "onStart", [intent,startId]); }; BackgroundService.prototype.bind = function(intent) { PhoneGap.exec(null, null, "BackgroundService", "onBind", [intent]); }; BackgroundService.prototype.unbind = function(intent) { PhoneGap.exec(null, null, "BackgroundService", "onUnbind", [intent]); }; PhoneGap.addConstructor(function() { PhoneGap.addPlugin("BackgroundService", new BackgroundService()); }); 

    e nel mio index.html. Ho aggiunto il codice riportto di seguito nel mio button di button

    navigator.BackgroundService.onCreate (); navigator.BackgroundService.onStart (intento, 1);

    Il mio errore è:

     ERROR/AndroidRuntime(14981): FATAL EXCEPTION: main ERROR/AndroidRuntime(14981): java.lang.RuntimeException: Unable to instantiate service com.app.newly.BackgroundService: java.lang.ClassCastException: com.app.newly.BackgroundService ERROR/AndroidRuntime(14981):at android.app.ActivityThread.handleCreateService(ActivityThread.java:2943) ERROR/AndroidRuntime(14981):at android.app.ActivityThread.access$3300(ActivityThread.java:125) ERROR/AndroidRuntime(14981): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2087) ERROR/AndroidRuntime(14981): at android.os.Handler.dispatchMessage(Handler.java:99) ERROR/AndroidRuntime(14981): at android.os.Looper.loop(Looper.java:123) ERROR/AndroidRuntime(14981): at android.app.ActivityThread.main(ActivityThread.java:4627) ERROR/AndroidRuntime(14981): at java.lang.reflect.Method.invokeNative(Native Method) ERROR/AndroidRuntime(14981): at java.lang.reflect.Method.invoke(Method.java:521) ERROR/AndroidRuntime(14981): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) ERROR/AndroidRuntime(14981): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) ERROR/AndroidRuntime(14981): at dalvik.system.NativeStart.main(Native Method) ERROR/AndroidRuntime(14981): Caused by: java.lang.ClassCastException: com.app.newly.BackgroundService ERROR/AndroidRuntime(14981): at android.app.ActivityThread.handleCreateService(ActivityThread.java:2940) ERROR/AndroidRuntime(14981): ... 10 more 

    Se ho rimosso startService (nuovo intento (questo, MyService.class)); dal file java ho l'errore di seguito:

     ERROR/Web Console(4785): ReferenceError: Can't find variable: SqlitePlugin at file:///android_asset/www/BackgroundService.js:31 ERROR/Web Console(4785): TypeError: Result of expression 'window.plugins.SqlitePlugin' [undefined] is not an object. at file:///android_asset/www/index.html:26 

    altrimenti non riesco a gestire l'applicazione che riceve l'errore nel file java. Ottengo il contrassegno rosso (come ' X ') nell'angolo sinistro di questa linea 'startService (nuovo intento (questo, MyService.class ));' per favore dimmi where ho sbagliato, vi prego di guidarmi, grazie in anticipo.

    controlli prego l'immagine dove ottengo l'errore Sto ottenendo l'errore nel servizio di avvio. Quando sposterò il cursore sul startService sto ottenendo il metodo create 'startService (intent)'

    E io sto avendo il dubbio in questo plugin posso essere in grado di eseguire il javascript in background o no. Se è ansible come get l'avviso in background.please dirmi where sono sbagliato, vi prego di guidare, grazie in anticipo.

    2 Solutions collect form web for “Come creare plugin in phonegap per eseguire l'applicazione in background?”

    Creazione del plugin è bene. Crea il tuo servizio proprio come un normale file java. E poi Appena lo chiami questo plugin. si avvia appena il tuo servizio come

     startService(new Intent(this, MyService.class)); 

    Poi il tuo servizio verrà eseguito in background.This è un modo semplice da fare.

    Se separatamente si crea il servizio quindi

    Il tuo plug-in dovrebbe essere simile a questo

     public class BackgroundService extends Plugin { private static final String TAG = "BackgroundService"; private static final String CALL_SERVICE_ACTION = "callService"; @Override public PluginResult execute(String action, JSONArray args, String callbackId) { Log.i(TAG, "Plugin Called"); PluginResult result = null; if (CALL_SERVICE_ACTION.equals(action)) { Log.d(TAG, "CALL_SERVICE_ACTION"); startService(new Intent(ctx, MyService.class)); } else { result = new PluginResult(Status.INVALID_ACTION); Log.d(TAG, "Invalid action : " + action + " passed"); } return result; } } 

    Il file .js dovrebbe essere simile a questo

     function BackgroundService() { }; BackgroundService.prototype.callService = function(successCallback, failCallback) { return PhoneGap.exec(successCallback, failCallback, "BackgroundService", "callService", [ null ]); }; PhoneGap.addConstructor(function() { PhoneGap.addPlugin("BackgroundService", new BackgroundService()); }); 

    E il tuo file HTML dovrebbe essere simile a questo

     function callServiceFunction() { window.plugins.BackgroundService.callService('callService', callServiceSuccessCallBack, callServiceFailCallBack); } function callServiceSuccessCallBack(e) { alert("Success"); } function callServiceFailCallBack(f) { alert("Failure"); } 

    Inoltre è necessario registrare il tuo plugin phonegap nel tuo res / xml / plugins.xml come

     <plugin name="BackgroundService" value="package-structure.BackgroundService"/> 

    Nel metodo onCreate della class Java che si estende da DroidGap, assicurarsi di aver impostato correttamente "keepRunning".

      super.setBooleanProperty("keepRunning", true); 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.