【问题标题】:Background Service for notifications通知后台服务
【发布时间】:2018-05-20 21:08:42
【问题描述】:

我正在为我的 Android 应用程序的通知提供程序工作,它使用一个 WebView,它使用 JavaScriptInterface 从远程 Javascript 文件中获取信息,根据从服务器接收到的信息,它会触发我的应用程序发送抬头通知。

所以,我在 onCreate void 中添加了一个 JavaScript 接口:

OnomeWebContainer.addJavascriptInterface(new WebAppInterface(this), "Android");

并创建了 WebAppInterface 类

// Interfacing with Javascript Code
public class WebAppInterface {
    Context mContext;

    WebAppInterface(Context c) {
        mContext = c;
    }

    @JavascriptInterface
    public void showTempHumUnavailableNotification(String toast) {
        OnomeTempHumUnavailableNotification();
    }

    @JavascriptInterface
    public void showSecurDudeAlertNotification(String toast) {
        OnomeSecurDudeAlertNotification();
    }
}

当某个文件在远程服务器上不可用时,JavaScript 文件会触发通知。

function showDHT11Alert() {
$.ajax({
    url: 'http://serveraddress/OnomeWeb/resources/data/tmp/onomeDHT11On',
    success: function () {
        $('#onomenotif_DHT11Unavailable').hide();
    },
    error: function () {
        $('#onomenotif_DHT11Unavailable').show();
        showDHT11Toast();
    },
});
}

function showDHT11Toast(toast) {
        Android.showTempHumUnavailableNotification(toast);
}

即使应用程序在后台,通知提供程序也能正常工作,但显然如果我从最近的应用程序屏幕关闭应用程序,通知提供程序就会停止工作。现在我想让这个 JavaScript 接口在后台服务中工作,即使应用程序已从最近的应用程序中关闭。

后台服务应该是我的问题的最佳解决方案,但是我怎样才能将它与主 WebView 接口呢?这可能吗?

【问题讨论】:

    标签: java android service webview


    【解决方案1】:

    后台服务应该是我问题的最佳解决方案,但是 如何将其与主 WebView 接口?这可能吗?

    很遗憾,这是不可能的。 JavaScriptInterface 由您的应用通过调用

    注入

    OnomeWebContainer.addJavascriptInterface(new WebAppInterface(this), "Android");

    而且它只对您的 WebView 可用。其他 WebView 不会注入它,因此无法触发您的 showTempHumUnavailableNotification

    【讨论】:

    • @IvanS。不幸的是,没有可用的解决方法。仅当您的应用位于前台并在您的应用中加载 WebView 时,它才会起作用。
    • 哦,好的。我想我可以创建一个服务来询问远程服务器的文件可用性(独立于 WebView),并据此触发通知。这可能是一种解决方法,因为它独立于 WebView。显然,这必须在一种循环中执行。这可以代替使用 JavaScript 接口吗?
    • I thought I may create a Service that interrogates the remote server for file availability 什么意思?
    • 例如,一个在后台工作的服务,逻辑类似: 1)检查文件在“address/target.file”; 2)如果文件存在; 2.1) 什么都不做; 3)否则,如果文件不存在; 3.1) 触发通知。而且服务总是要检查文件。
    • @IvanS。您不必为此要求连续循环。只需实现 FileObserver。一些教程可用here
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多