【问题标题】:How to send data from server to Android?如何将数据从服务器发送到 Android?
【发布时间】:2015-03-30 07:30:33
【问题描述】:

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

我认为我有以下 3 个选项

  1. 在服务器和移动设备之间建立会话。启动客户端服务器通信

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

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

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

【问题讨论】:

  • 没有web-service 也没有GCM 怎么可能?如果您不想使用web service,请删除第二个和第三个选项。
  • 我提到了第二个和第三个选项,只是为了让其他人知道我们总共有这些选项。我正在寻找一个我不必使用网络服务的选项。但如果没有可用的东西,那么一定要考虑以最有效的方式使用它。
  • 就我而言,唯一的方法是在后台运行一项服务,该服务将更新从您的服务器获取数据并同步它。我在我的许多应用程序中都做过这件事。并且根据您的要求,GCM 在这里没有用处。
  • 好的,谢谢@MD。您能否建议我是否必须为此运行后台 android 服务,那么该 android 服务是否应该调用 Web 服务来检查是否有任何更新?与选项 3 相同,但仅在后台服务中。另外,您如何找到选项 2。意味着向用户发送 SMS,侦听器将检测到然后执行相应的操作。 Listener 还会立即从用户的设备中删除该 SMS,这样用户就不会收到通知。
  • @sanchitsigh 是的。您所要做的就是调用一个主要的 Web 服务来检查 Date 是否更改为服务器。如果是,那么某些人会触摸您的服务器(数据),如果不是,则无事可做。

标签: android client-server google-cloud-messaging


【解决方案1】:

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

根据您的问题:

我计划为此使用推送通知 (GCM),但推送 通知不是一个好的选择,因为我不想让用户知道 我们正在移动应用中添加数据。

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

【讨论】:

  • 你的回答还挺有解释力的,但是你不觉得GCM对于这类数据的实时成功率很低吗。你将如何处理它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-13
  • 2017-07-12
  • 1970-01-01
  • 2012-07-19
  • 2015-08-21
  • 2016-06-12
  • 2012-02-14
相关资源
最近更新 更多