正如你可能知道的訪問谷歌服務器,如www.android.com及其所有子域的樣developer.android.com在一些國家通過谷歌否認。因此,不可能使用GCM。Android,是否可以在不使用Google雲消息系統的情況下向設備廣播消息?
我有一個新聞&雜誌應用程序,我想廣播消息到特定設備。例如,某些用戶想要對體育進行新的更新,而另一些用戶可能會對其他類別進行新的更新。
我正在尋找一種方法來模擬GCM系統。可能嗎?
謝謝
正如你可能知道的訪問谷歌服務器,如www.android.com及其所有子域的樣developer.android.com在一些國家通過谷歌否認。因此,不可能使用GCM。Android,是否可以在不使用Google雲消息系統的情況下向設備廣播消息?
我有一個新聞&雜誌應用程序,我想廣播消息到特定設備。例如,某些用戶想要對體育進行新的更新,而另一些用戶可能會對其他類別進行新的更新。
我正在尋找一種方法來模擬GCM系統。可能嗎?
謝謝
除了有來自GCM許多不同的選擇。
選項需要一些黑客:
aSmack使用XMPP
第三方外的開箱提供商:
另見:
是的,這是可能的。
Message API
(你可以使用任何格式JSON或XML)Android Service
將連接到該消息API和檢查 新的消息BroadcastReceiver
這裏是我使用的一些代碼。
首先我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
創建BroadcastReceiver
和Service
:
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到服務器,您可以檢查是否有特定設備的新消息。這樣你可以發送消息到特定的設備。 How to getUDID ?
Here是我使用AsyncTask進行連接的原因,這兩個示例可以幫助您瞭解如何與服務器進行通信。
how to send data to server using android by Http post method?
Send data from android to server via JSON
我知道這是一個長鏡頭,但希望這可以幫助你以某種方式。
P.S:我也是從國家的由谷歌
否認一個
這可能嗎?爲什麼不呢:Google做到了。請注意,添加其他服務會使用更多電池。 –