Gcm取消注册

时间:2014-03-24 09:47:02

标签: android asynchronous google-cloud-messaging

我正在使用android中的GCM。 通过使用以下代码异步注册设备,我完成了使用GCM注册设备。

private void registerInBackground() {
        new AsyncTask<Void, Void, String>() {
            @Override
            protected String doInBackground(Void... params) {
                String msg = "";
                try {
                    if (gcm == null) {
                        gcm = GoogleCloudMessaging.getInstance(context);
                    }
                    regid = gcm.register(SENDER_ID);
                    msg = "Device registered, registration ID=" + regid;

                    storeRegistrationId(context, regid);
                    msg="Registration success. Regid: "+regid;
                } catch (IOException ex) {
                    msg = "Error :" + ex.getMessage();
                    // If there is an error, don't just keep trying to register.
                    // Require the user to click a button again, or perform
                    // exponential back-off.
                }
                return msg;
            }

            @Override
            protected void onPostExecute(String msg) {
                Log.e("GCM", msg);
            }
        }.execute(null, null, null);
    }

注册在registrationActivity中完成 现在我要取消注册设备。 取消注册命令由服务器应用程序发送,在android端接收。 如何从我处理收到的消息的活动(mdmActivity)中取消注册设备。 是否应该是asyn或sync ??

为注册活动创建一个对象并使用mdmActivity中的该对象调用unregisterInBackground函数是错误的吗?

 RegistrationActivity reg=new RegistrationActivity();
 reg.unregisterInBackground();

registrationActivity中的unregisterInBackground函数如下:

protected void unregisterInBackground() {
        new AsyncTask<Void, Void, String>() {
            @Override
            protected String doInBackground(Void... params) {
                String msg = "";
                try {
                    if (gcm == null) {
                        gcm = GoogleCloudMessaging.getInstance(context);
                    }
                    gcm.unregister();
                    msg = "Device unregistered, registration ID=" + regid;

                    // delete the regID 
                    deleteRegistrationId(context, regid);
                } catch (IOException ex) {
                    msg = "Error :" + ex.getMessage();
                }
                return msg;
            }

            @Override
            protected void onPostExecute(String msg) {
                Log.e("unregistration", msg);
            }
        }.execute(null, null, null);
    }

需要你的帮助!!提前致谢。

1 个答案:

答案 0 :(得分:0)

unregister()也在阻止,例如register()。因此,您确实需要在后台线程中运行它,类似于使用AsyncTask的方式。

你在GCM实例上调用它,所以只要你有gcm个实例,我认为可以从任何一个活动中调用它。

在实施取消注册功能之前,您可能需要阅读this