我是 Android 新手,但熟悉 Web 编程。目前我正在使用phonegap 编写一个应用程序。
我的应用程序通过 websockets 接收新闻并将其显示给用户。
我的问题是,当用户关闭我的应用程序时,我无法使用 WebView
接收新闻。搜索了一段时间后,我发现了一个Phonegap的插件,可以用Java运行后台服务:https://github.com/Red-Folder/bgs-core .
但是我是 Java 新手,我不知道如何在后台服务中运行 websockets(Android 的 autoban.ws)来接收新闻并将其显示在通知栏中。
最佳答案
我认为你应该使用不同的方法。你想要做的事情在 Android 上实际上是不可能的。但你可以使用Google Cloud Messaging将数据推送到安装了您的应用程序的设备。它的工作原理是这样的:
只要你有一些服务器,例如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/