android应用程序与phonegap在后台服务中运行websocket

jab*_*bar 0 java android websocket cordova

我是Android的新手,但熟悉网络编程.目前我正在使用phonegap编写应用程序.

我的应用程序通过websockets接收新闻并将其显示给用户.

我的问题是,当我的应用程序被用户关闭时,我无法使用它WebView来接收新闻.经过一段时间的搜索,我找到了一个可以用Java运行后台服务的Phonegap插件:https://github.com/Red-Folder/bgs-core.

但我是Java的新手,我不知道如何在后台服务中运行websockets(autoban.ws for Android)来接收新闻并在通知栏中显示它.

Xav*_*ler 5

我认为你应该采用不同的方法.您尝试做的事情在Android上是不可能实现的.但您可以使用Google Cloud Messaging将数据推送到安装了应用的设备.有点像这样:

在此输入图像描述

只要您有一些服务器,例如Google App Engine项目,您就可以将任何数据推送到您的应用程序,您也可以定位特定设备.大多数应用都使用Google Cloud Messaging,因为它非常高效且电池友好,而且速度非常快.如果没有Google Cloud Messaging或类似的东西,您必须定期轮询服务器并检查更新.这会唤醒设备并耗尽电池 - 尤其是当您需要频繁更新时.Google Cloud Messaging解决了所有这些问题,但如果您以前从未做过类似的事情,那么它也会有更多的工作.但由于您是一名Web开发人员,我认为您应该能够处理它.


关于你的问题

我的问题是,当我的应用程序被用户关闭时,我无法使用webview接收新闻.搜索后,我找到了一个可以用Java运行后台服务的Phonegap插件:https: //github.com/Red-Folder/bgs-core.

一般来说,这是一个坏主意.它不适用于Android.你不能永久地在后台运行任何东西.即使你可以,这样的设备Service也会非常快地耗尽电池,因为设备永远无法入睡.即使你只是像我上面所描述的那样进行轮询,你仍然需要每隔x分钟唤醒设备并检查更新.所以我可以重申:使用Google Cloud Messaging.

不过,有关于如何使用bgs-core插件的非常详细的教程:

您还可以在GitHub上找到示例项目.

但我是Java新手,不知道如何在后台服务中运行websockets(autoban.ws for Android)来接收新闻并在通知栏中显示它.

Android没有websockets的原生解决方案,所以我建议你使用websocket库.您可以选择以下三个库中的一个:

在以下示例中,我将使用AutobahnAndroid


首先,您应该完成构建自己的插件教程!本教程假设您已经了解了如何创建插件的基础知识,但由于您对所有这些都相对较新,因此您可以查看此答案.它详细介绍了如何创建基本插件,并且应该涵盖其他教程中大部分(如果不是全部)缺少的信息.

完成创建插件后,与AutobahnAndroid建立连接非常简单:

final WebSocketConnection connection = new WebSocketConnection();
try {
    connection.connect(url, new WebSocketHandler() {

        @Override
        public void onOpen() {
            // Web socket connection has been opened
        }

        @Override
        public void onTextMessage(String payload) {
            // Received text message
        }

        @Override
        public void onClose(int code, String reason) {
            // Web socket connection was closed
        }
    });
} catch (WebSocketException e) {
    Log.d(LOG_TAG, "Could not connect!", e);
}
Run Code Online (Sandbox Code Playgroud)

你也可以像这样发回数据:

connection.sendTextMessage(someMessage);
Run Code Online (Sandbox Code Playgroud)