从服务 android 调用 Javascript

Calling Javascript from service android

我想将我的 android 应用程序连接到 WAMP 服务器。我正在使用 javascript 来做到这一点。我有一个 activity,我在其中加载了一个 HTML 文件。在内部,HTML 文件将加载 javascript.

即使 phone 被锁定,我希望服务器继续 运行。

现在,当 phone 被锁定时,服务器连接断开。

遵循我的代码 activity:

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

我在 服务 中创建了 WebView 对象,并且成功调用了我的 js 函数。

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