android - 如何将数据从服务器发送到Android?

标签 android client-server google-cloud-messaging

我正在做一个项目,我希望我的服务器向我的应用程序发送一些数据(无需从移动设备调用网络服务)。它就像一个操作移动应用程序以添加数据的网络面板。因此,当用户在网站中添加数据并单击添加时,它应该将该数据添加到移动应用程序(如果移动设备已连接到互联网)。这也就像向 android 应用程序发送命令一样。 我计划为此使用推送通知 (GCM),但推送通知不是一个好的选择,因为我不想让用户知道我们正在移动应用程序中添加数据。即使应用程序未处于 Activity 状态或未打开,它也应该添加。

我想我有以下 3 个选择

  1. 在服务器和手机之间建立 session 。开始客户端服务器通信

  2. 使用短信发送命令,然后按要求调用网络服务

  3. 每 15-20 秒调用一次网络服务以检查是否有任何更新。 (即使在后台)

如果我有任何其他选择来实现这一点,请提出建议。

最佳答案

我真的不知道你从哪里得到你的信息,但你和 MD 都错了,GCM 是最好的选择。

来自你的问题:

I planned to use Push Notification (GCM) for this, but push notifications will not be a good option as I didn't want the user to know that we are adding data in mobile app.

GCM 与向用户显示通知有关,但不是它的作用。

GCM 是“谷歌云消息传递”。它只会向您的应用程序发送一条消息。此消息在 BroadcastReceiver 中接收。在此 BroadcastReceiver 中,您可以执行所需的任何操作,例如将信息与您的服务器同步。

我将展示 GCM 的 BroadcastReceiver 的可能实现示例。

这是一个简化的例子,并不是一个完整的实现:

public class GcmBroadcastReceiver extends WakefulBroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle b = intent.getExtras(); // you send those extras from your server
        int type = b.getInt("type");
        switch(type){
            case TYPE_SYNC:
                 // start a `Service` to sync data from your server 
            break;
            case TYPE_ADD_DATA:
                 long id = b.getLong("id");
                 String name = b.getString("name");
                 String descr = b.getString("descr");
                 // call code to add id, name, descr to your local data
            break;
            case TYPE_NOTIFICATION:
                 String title = b.getString("title");
                 String message = b.getString("message");
                 // call code to make a notification with title and message
            break;
        }
    }
}

在此示例中,您的服务器可以发送 3 种不同类型的 GCM。

  • TYPE_SYNC:将使您的应用启动后台服务,连接到服务器并同步信息
  • TYPE_ADD_DATA:将直接在消息中发送数据并直接添加到设备存储(可能是 SQLite)
  • TYPE_NOTIFICATION:这是用户收到任何通知的唯一选项。其他两个选项对用户来说是透明的。

有关完整的实现以及如何正确使用 WakefulBroadcastReceiver,请查看官方文档:http://developer.android.com/google/gcm/client.html

关于android - 如何将数据从服务器发送到Android?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29340596/

相关文章:

android - 如何在抽屉 Handlebars 上制作多个按钮?

android - GcmTaskService 与 SyncAdapter

Android:什么是 ProGuard,我什么时候需要使用它?

安卓 GCM : Can we get data as a complete JSON structure?

android - Google Play 撤销了测试订阅

java - 二维码和扫描仪,Android ?

android - 使用带有 HttpURLConnection 的 POST 发送文件

c - 使用 recv 填充垃圾的缓冲区

sockets - UDP套接字编程中不同语言的客户端和服务器

java - 如何从 ISO 3166 代码中查找 ISD 代码?