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

San*_*ush 4 android client-server google-cloud-messaging

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

我认为我有以下3种选择

  1. 在服务器和移动设备之间进行会话。开始客户端服务器通信

  2. 使用SMS发送命令,然后根据要求调用Web服务

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

如果我还有其他选择可以实现此目标,请提出建议。

Bud*_*ius 5

我真的不知道您从何处获取信息,但是您和您MD都是错的,GCM是最佳选择。

从您的问题:

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

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

GCM是“ Google Cloud Messaging”。它只会向您的应用发送一条消息。此消息是在中接收的BroadcastReceiver。从内部BroadcastReceiver您可以执行所需的任何操作,例如将信息与服务器同步。

我将展示BroadcastReceiverGCM 的可能示例实现。

那是一个简化的示例,而不是完整的实现:

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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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