2016-08-19 1 views
2

WAMP 서버에 안드로이드 앱을 연결하고 싶습니다. 나는 그것을하기 위해 javascript를 사용하고있다. 내가 HTML file을로드하는 활동이 있습니다. 내부적으로 HTML filejavascript을로드합니다.서비스에서 자바 스크립트 호출 android

휴대 전화가 잠긴 경우에도 서버가 계속 실행되기를 원합니다.

이제 전화가 잠길 때 서버 연결이 끊어집니다.

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

    } 
} 

어떤 방법 우리는 서비스에서 javascript 함수를 호출 할 수 있나요 :

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 + "')"); 
        } 
       } 
     ); 

내 JS 파일을 따릅니다 :

내 활동의 코드를 따릅니다? 가능한 경우 앱이 포 그라운드에 있지 않을 때에도 서버가 실행되도록 할 수 있습니다.

감사합니다.

답변

1

서비스 안에 WebView object을 만들고 성공적으로 내 js function을 받았습니다.

@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

존재하는 경우 UI가 소유하고있는 것과 동일한 WebView 객체를 사용하고 싶습니다. (필요한 상태가 있습니다.) 가능한가요? – Michael