从服务android调用Javascript

时间:2016-08-19 12:10:47

标签: android android-service

我想将我的Android应用程序连接到WAMP服务器。我正在使用javascript来执行此操作。我有一个活动,我加载HTML file。在内部,HTML file将加载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文件:

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函数吗?如果可能,即使应用程序不在前台,也允许服务器运行。

感谢。

1 个答案:

答案 0 :(得分: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;
}