我正在尝试使用GCM开发应用程序 . 我阅读了关于GCM的官方文档,但感觉有两种方法可以做到这些 .
1.至于为GCM注册Android设备
似乎有两种方法可以将设备注册到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(Context context,String regId)
onUnRegistered(Context context,String regId)
onMessage(上下文上下文,意图意图)
...等等 .
虽然描述了“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();
}
}
}
}
是否有两种方法可以完成上述两个过程,我可以使用我想要的任何方式?
1 回答
只有真正的方法,这是你的第二种方法 .
GCMRegistrar
使用第二种方法实现第一种方法 .只有一种真正的方式,这是你的第二种方法 .
GCMBaseIntentService
使用第二种方法来实现第一种方法 - 这就是你需要在清单中注册GCM提供的BroadcastReceiver
的原因 .在其他条件相同的情况下,我建议使用第一种方法,因为它更简单,并为您处理各种问题 . 但是,无论哪种方式都有效