您可能知道访问 Google 服务器(例如www.android.com)及其所有子域(例如developer.android.com)在某些国家/地区被 Google 拒绝。因此,无法使用 GCM。
我有一个 NEWS & Magazine 应用程序,我想向特定设备广播消息。例如,一些用户希望有新的体育更新,而另一些用户可能有其他类别的新更新。
我正在寻找一种模拟 GCM 系统的方法。是否可以?
谢谢
您可能知道访问 Google 服务器(例如www.android.com)及其所有子域(例如developer.android.com)在某些国家/地区被 Google 拒绝。因此,无法使用 GCM。
我有一个 NEWS & Magazine 应用程序,我想向特定设备广播消息。例如,一些用户希望有新的体育更新,而另一些用户可能有其他类别的新更新。
我正在寻找一种模拟 GCM 系统的方法。是否可以?
谢谢
是的,有可能。
Message API
(您可以使用任何格式的 JSON 或 XML)Android Service
它将连接到该消息 API 并检查新消息BroadcastReceiver
这是我使用的一些代码。
首先我创建BroadcastReceiver
并Service
在AndroidManifest.xml
<receiver android:name="com.example.Push_Notification" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
<action android:name="android.net.wifi.NETWORK_IDS_CHANGED" />
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<service
android:name="com.example.Push_Notification_Checker"
android:enabled="true" />
这是Push_Notification
:
public class Push_Notification extends BroadcastReceiver{
private Context context;
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
this.context = context;
startService();
}
public void startService(){
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE );
NetworkInfo activeNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE|ConnectivityManager.TYPE_WIFI);
boolean isConnected = activeNetInfo != null && activeNetInfo.isConnectedOrConnecting();
Calendar cur_cal = Calendar.getInstance();
cur_cal.setTimeInMillis(System.currentTimeMillis());
Intent i = new Intent(context, Push_Notification_Checker.class);
PendingIntent pintent = PendingIntent.getService(context, 0, i, 0);
AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
if (isConnected){
catchLog("connecte " +isConnected);
alarm.setRepeating(AlarmManager.RTC_WAKEUP, cur_cal.getTimeInMillis(), 1 * 60*1000, pintent);
}
else {
catchLog("not connecte " +isConnected);
alarm.cancel(pintent);
}
}
private void catchLog(String log) {
Log.i("PushNotification", log);
}
}
这是Push_Notification_Checker
服务。:
public class Push_Notification_Checker extends Service {
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
catchLog("Service got created");
nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
pref = getSharedPreferences(Constants.SHARED_PRED, 0);
}
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
//Here i call AsyncTask to check Message. Android didn't allow Network Connection directly tied into Main Thread
new GetMessage(getApplicationContext()).execute();
}
}
通过向服务器发送 android UDID,您可以检查特定设备是否有新消息。这样您就可以将消息发送到特定设备。如何获取UDID?
这就是我使用 AsyncTask 进行连接的原因,这两个示例可以帮助您了解如何与服务器进行通信。
如何通过Http post方法使用android向服务器发送数据?
我知道这是一个很长的镜头,但希望这可以在某种程度上帮助你。
PS:我也是来自被谷歌拒绝的国家之一