How to run cordova plugin in Android background service?

688 views
Skip to first unread message

meshen mehsen

unread,
Jul 10, 2014, 10:52:29 AM7/10/14
to phon...@googlegroups.com
I am working on mobile application developed on cordova . I want to implement a background service that do some work like open socket connection syncronise local database with remote one and notify the users on new remote pushes etc . The point is I have this code implemented in javascript but I want execute it i background.


I searched internet for a cordova background service plugin.


 The best one I think is red-folder but it is just for android and it does not let me to write javascript to be executed in background. but just exchange json between java and javascript.

I have read some topics about background service in android these are useful ones I found:



So I started writing cordova plugin (primarily on android) to execute the javascript code in background. I created a webview from the background service to execute the javascript from it. This works fine when I execute normal javascript but when it comes to cordova plugins js it fails for example the device `device.uuid` gives `null`.



This is the java service  code:



         
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);
     
         
}




There is no error in the logcat.
So I tried to write the device object on the screen and thats what I get :
       
     
   
   document.write(JSON.stringify(window.device))



And this is the result :


   
   { available : false,
        plaform
: null ,
        version
: null ,
        uuid
: null ,  
        cordova
: null ,
        model
: null
       
}


Any help about this problem ?



 

Çetin DOĞU

unread,
Nov 27, 2014, 3:28:37 AM11/27/14
to phon...@googlegroups.com
Hello Mehsen,
you can run JS code in background on android platform via BackgroundJS. 
add this settings to your config.xml file;

  <feature name="BackgroundJS">
    <param name="ios-package" value="BackgroundJS" />
  </feature>
 <gap:plugin name="com.badrit.backgroundjs" version="0.1.0" />  
  <gap:plugin name="org.apache.cordova.device" version="0.2.3" />
Reply all
Reply to author
Forward
0 new messages