2016-08-19 1 views
2

Ich möchte meine Android-App zu WAMP Server verbinden. Ich verwende javascript, um es zu tun. Ich habe eine Aktivität, wo ich eine HTML file laden. Intern lädt HTML file das javascript.Aufruf von Javascript aus Service-Android

Ich möchte der Server läuft auch wenn das Telefon gesperrt ist.

Jetzt fällt die Serververbindung, wenn das Telefon gesperrt ist.

Folgt den Code meiner Tätigkeit:

mWebView = (WebView) findViewById(R.id.webview); 
     WebSettings webSettings = mWebView.getSettings(); 
     webSettings.setJavaScriptEnabled(true); 
     mWebView.addJavascriptInterface(new JavascriptInterface(this), "JSInterface"); 
     mWebView.setWebContentsDebuggingEnabled(true); 

     mWebView.setWebViewClient(
       new WebViewClient() { 
        public void onPageFinished(WebView view, String url) { 
         super.onPageFinished(view, url); 
         Log.d(TAG,"Page loading finished"); 

         String ip = "XXX.XXX.XXX.XXX"; 
         mWebView.loadUrl("javascript:configureServerIp('"+ ip + "')"); 
        } 
       } 
     ); 

meine JS-Datei folgt:

function configureServerIp(ip) { 
    console.log("ip=>"+ip) 
    if(ip != null) { 
     connection = new autobahn.Connection({url: 'ws://'+ip+':8080/ws', realm: 'realm1'}); 

     connection.onopen = function (session) { 
      openSession = session; 
      console.log("SESSION: " + session); 
      session.subscribe('bms.device.msg',onevent) 
      session.subscribe('bms.device.request.location',onLocationRequest) 
      session.subscribe('bms.device.request.config',onConfigRequest) 
      window.JSInterface.isConnected(true); 
     }; 

     connection.onClose = function(reason, details) { 
      openSession = null; 
      window.JSInterface.isConnected(false); 
     } 

     connection.open(); 

    } 
} 

Gibt es eine Möglichkeit, wir javascript Funktion von einem Service anrufen können? Wenn es möglich ist, wird das Ausführen des Servers auch dann ermöglichen, wenn die App nicht im Vordergrund ist.

Danke.

Antwort

1

Ich erstellte WebView object in meinem Service und ich habe meine js function erfolgreich aufgerufen.

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
     webView = new WebView(this); 
     WebSettings webSettings = webView.getSettings(); 
     webSettings.setJavaScriptEnabled(true); 

     webView.setWebContentsDebuggingEnabled(true); 
     webView.setWebViewClient(
       new WebViewClient() { 
        public void onPageFinished(WebView view, String url) { 
         super.onPageFinished(view, url); 

         for(int i=0; i<10; i++) { 
          webView.loadUrl("javascript:sample()"); 
         } 

        } 
       } 
     ); 
     webView.loadUrl("file:///android_asset/html/index.html"); 
     return START_NOT_STICKY; 
} 
+0

Wenn es existiert, möchte ich das gleiche WebView-Objekt verwenden, das die UI besitzt (es hat Status, den ich brauche) ... ist das möglich? – Michael