如何从服务器发送数据到Android?
How to send data from server to Android?
我正在做一个项目,我希望我的服务器向我的应用程序发送一些数据(无需从移动设备调用 Web 服务)。它就像一个操作移动应用程序以添加数据的网络面板。因此,当用户在网站中添加数据并单击添加时,它应该将该数据添加到移动应用程序(如果移动设备已连接到互联网)。这也类似于向 android 应用程序发送命令。
我计划为此使用推送通知 (GCM),但推送通知不是一个好的选择,因为我不想让用户知道我们正在移动应用程序中添加数据。即使应用程序未处于活动状态或未打开,它也应该添加。
我想我有以下 3 个选择
在服务器和手机之间建立会话。开始客户端服务器通信
使用短信发送命令,然后按要求调用网络服务
每 15-20 秒调用一次 Web 服务以检查是否有任何更新。 (即使在后台)
如果我有任何其他选择来实现这一点,请提出建议。
我真的不知道你从哪里得到的信息,但你和 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 是 "Google Cloud Messaging"。它只会向您的应用程序发送一条消息。此消息是在 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
我正在做一个项目,我希望我的服务器向我的应用程序发送一些数据(无需从移动设备调用 Web 服务)。它就像一个操作移动应用程序以添加数据的网络面板。因此,当用户在网站中添加数据并单击添加时,它应该将该数据添加到移动应用程序(如果移动设备已连接到互联网)。这也类似于向 android 应用程序发送命令。 我计划为此使用推送通知 (GCM),但推送通知不是一个好的选择,因为我不想让用户知道我们正在移动应用程序中添加数据。即使应用程序未处于活动状态或未打开,它也应该添加。
我想我有以下 3 个选择
在服务器和手机之间建立会话。开始客户端服务器通信
使用短信发送命令,然后按要求调用网络服务
每 15-20 秒调用一次 Web 服务以检查是否有任何更新。 (即使在后台)
如果我有任何其他选择来实现这一点,请提出建议。
我真的不知道你从哪里得到的信息,但你和 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 是 "Google Cloud Messaging"。它只会向您的应用程序发送一条消息。此消息是在 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