0

下面是类internalRegister方法的代码GCMRegistrar

static void internalRegister(Context context, String... senderIds) {
        if (senderIds == null || senderIds.length == 0 ) {
            throw new IllegalArgumentException("No senderIds");
        }
        StringBuilder builder = new StringBuilder(senderIds[0]);
        for (int i = 1; i < senderIds.length; i++) {
            builder.append(',').append(senderIds[i]);
        }
        String senders = builder.toString();
        Log.v(TAG, "Registering app "  + context.getPackageName() +
                " of senders " + senders);
        Intent intent = new Intent(GCMConstants.INTENT_TO_GCM_REGISTRATION);
        intent.setPackage(GSF_PACKAGE);
        intent.putExtra(GCMConstants.EXTRA_APPLICATION_PENDING_INTENT,
                PendingIntent.getBroadcast(context, 0, new Intent(), 0));
        intent.putExtra(GCMConstants.EXTRA_SENDER, senders);
        context.startService(intent);
    }

在最后一行代码中,它启动了一个应该联系 GCM 服务器的服务。GSM 服务器反过来发com.google.android.c2dm.intent.REGISTRATION回广播。这是哪个服务?

4

1 回答 1

0

从 2.2 开始,意图 com.google.android.c2dm.intent.REGISTRATION 是 Android 操作系统的一部分。在过去,我们为此目的调用 startService 以便将我们的设备注册到 Google C2DM 服务器。您也可以使用 GCM 做同样的事情,而无需使用 GCM 客户端库。

看到这个迁移指南,你就会明白我的意思:http: //developer.android.com/guide/google/gcm/c2dm.html

对我来说,我完全跳过了 GCM 库,直接使用 com.google.android.c2dm.intent.REGISTRATION 意图进行注册。

于 2012-07-02T22:35:41.290 回答