我正在尝试使用 GCM 开发应用程序。我阅读了有关 GCM 的官方文档,但感觉有两种方法可以做到这一点。
1.关于为GCM注册安卓设备
似乎有两种方法可以将设备注册到 GCM。
“http://developer.android.com/guide/google/gcm/gs.html#android-app”说,
GCMRegistrar.checkDevice(this);
GCMRegistrar.checkManifest(this);
final String regId = GCMRegistrar.getRegistrationId(this);
if (regId.equals("")) {
GCMRegistrar.register(this, SENDER_ID);
} else {
Log.v(TAG, "Already registered");
}
另一方面,“http://developer.android.com/guide/google/gcm/gcm.html#registering”说,
Intent registrationIntent = new Intent("com.google.android.c2dm.intent.REGISTER");
// sets the app name in the intent
registrationIntent.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent(), 0));
registrationIntent.putExtra("sender", senderID);
startService(registrationIntent);
2.关于从GCM服务器获取响应并启动一个服务来处理它们
另外,我觉得有两种方法可以开始处理响应的意图。
“http://developer.android.com/guide/google/gcm/gs.html#android-app”这样的指示,
“创建 com.google.android.gcm.GCMBaseIntentService 的子类”
并实施
onRegistered(上下文上下文,字符串 regId)
onUnRegistered(上下文上下文,字符串 regId)
onMessage(上下文上下文,意图意图)
...ETC。
虽然描述了“http://developer.android.com/guide/google/gcm/gcm.html#registering”,
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public final void onReceive(Context context, Intent intent) {
MyIntentService.runIntentInService(context, intent);
setResult(Activity.RESULT_OK, null, null);
}
}
public class MyIntentService extends IntentService {
private static PowerManager.WakeLock sWakeLock;
private static final Object LOCK = MyIntentService.class;
static void runIntentInService(Context context, Intent intent) {
synchronized(LOCK) {
if (sWakeLock == null) {
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
sWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "my_wakelock");
}
}
sWakeLock.acquire();
intent.setClassName(context, MyIntentService.class.getName());
context.startService(intent);
}
@Override
public final void onHandleIntent(Intent intent) {
try {
String action = intent.getAction();
if (action.equals("com.google.android.c2dm.intent.REGISTRATION")) {
handleRegistration(intent);
} else if (action.equals("com.google.android.c2dm.intent.RECEIVE")) {
handleMessage(intent);
}
} finally {
synchronized(LOCK) {
sWakeLock.release();
}
}
}
}
是否有两种方法可以完成上述两个过程,并且我可以使用任何我想要的方式?