java - 带有phonegap的android应用程序在后台服务中运行websocket

标签 java android cordova websocket

我是 Android 新手,但熟悉 Web 编程。目前我正在使用phonegap 编写一个应用程序。

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

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

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

最佳答案

我认为你应该使用不同的方法。你想要做的事情在 Android 上实际上是不可能的。但你可以使用Google Cloud Messaging将数据推送到安装了您的应用程序的设备。它的工作原理是这样的:

enter image description here

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

<小时/>

关于您的问题

My problem is that when my application is closed by user, I can't use webview for receiving news. After searching I found a plugin for Phonegap that can run background services with Java: https://github.com/Red-Folder/bgs-core.

通常这是一个坏主意。而且它在 Android 上不起作用。你不能让任何东西永久在后台运行。即使可以,这样的 Service 也会很快耗尽电池,因为设备永远无法 hibernate 。即使您只是按照我上面描述的方式进行轮询,您仍然需要每 x 分钟唤醒设备并检查更新。所以我可以重申:使用 Google Cloud Messaging。

尽管如此,还是有关于如何使用 bgs-core 的非常详细的教程。插件:

您还可以找到sample project在 GitHub 上。

But I'm new to Java and don't know how to run websockets (autoban.ws for Android) in a background service to receive news and show it in the notification bar.

Android 没有针对 websocket 的 native 解决方案,因此我建议您使用 websocket 库。您可以选择这三个库之一:

在下面的示例中,我将使用 AutobahnAndroid

<小时/>

首先您应该浏览 Build your own plugin教程!本教程假设您已经了解如何创建插件的基础知识,但由于您对所有这些都比较陌生,您可以看看 this answer 。它详细介绍了如何创建基本插件,并且应该涵盖其他教程中缺少的大部分信息(如果不是全部的话)。

创建完插件后,与 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);
}

您还可以像这样发回数据:

connection.sendTextMessage(someMessage);

关于java - 带有phonegap的android应用程序在后台服务中运行websocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24449444/

相关文章:

java - Java 中有 MIME 类型的枚举吗?

android - 更改切换按钮 Android 的开/关文本

AJAX XML 无法在带有 Web-Works 或 Phonegap 的 BlackBerry 上运行

javascript - 升级 iOS 应用程序的 Cordova 版本

html - 适用于 ipad 和 ipad mini 的 phonegap 应用程序

java - @Transactional 服务方法回滚 hibernate 更改

java - 如何在java中转换时间数据?

java - 带有自定义比较器对象的二进制搜索不检查第一个元素

android - 如何在 Android 模拟器中释放 vspace

具有不同主页的 Android 应用程序