我正在尝试使用新的googlecloudmessaging api实现gcm。
我想检查设备是否已在云上注册,这是以前使用gcmregistar.is registered()检查过的。
我有没有办法用新的api来完成这个检查?
编辑:我知道我可以将注册ID保存在我的应用程序中,但我想知道我的设备在云上的状态—它是否已注册。

最佳答案

不推荐使用的GCMRegistrar只是一个helper客户机类,它将registrationid本地存储在设备上。GCMRegistrar.isRegistered()从未调用gcm服务器来查找设备是否已注册(因为没有这样的api)。它只是检查以前接收到的注册ID是否本地存储在特定应用程序的设备上(并在某些情况下(如应用程序版本更改时)使存储的注册ID无效)。
实际上,您可以看到gcmregistarhere的代码:

/**
 * Gets the current registration id for application on GCM service.
 * <p>
 * If result is empty, the registration has failed.
 *
 * @return registration id, or empty string if the registration is not
 *         complete.
 */
public static String getRegistrationId(Context context) {
    final SharedPreferences prefs = getGCMPreferences(context);
    String registrationId = prefs.getString(PROPERTY_REG_ID, "");
    // check if app was updated; if so, it must clear registration id to
    // avoid a race condition if GCM sends a message
    int oldVersion = prefs.getInt(PROPERTY_APP_VERSION, Integer.MIN_VALUE);
    int newVersion = getAppVersion(context);
    if (oldVersion != Integer.MIN_VALUE && oldVersion != newVersion) {
        Log.v(TAG, "App version changed from " + oldVersion + " to " +
                newVersion + "; resetting registration id");
        clearRegistrationId(context);
        registrationId = "";
    }
    return registrationId;
}

/**
 * Checks whether the application was successfully registered on GCM
 * service.
 */
public static boolean isRegistered(Context context) {
    return getRegistrationId(context).length() > 0;
}

因此,如果您将注册ID存储在应用程序中,您将获得与使用GCMRegistrar时完全相同的功能。要在客户端应用程序中确定设备是否已注册到GCM,唯一的方法是调用GoogleCloudMessaging.registerGoogleCloudMessaging.unregister

关于android - 新GCM中对应的GCMRegistrar.isRegistered(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20492268/

10-10 19:02