Android Gcm注销

Android Gcm注销,android,asynchronous,google-cloud-messaging,Android,Asynchronous,Google Cloud Messaging,我正在安卓系统中开发GCM。 通过使用以下异步注册设备的代码,我完成了设备与GCM的注册 private void registerInBackground() { new AsyncTask<Void, Void, String>() { @Override protected String doInBackground(Void... params) { String msg = ""

我正在安卓系统中开发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);
    }
注册活动中的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);
    }
protectedvoid unregisterInBackground()受保护{
新建异步任务(){
@凌驾
受保护字符串doInBackground(无效…参数){
字符串msg=“”;
试一试{
如果(gcm==null){
gcm=GoogleCloudMessaging.getInstance(上下文);
}
gcm.unregister();
msg=“设备未注册,注册ID=“+regid;
//删除注册表项
deleteRegistrationId(上下文,regid);
}捕获(IOEX异常){
msg=“错误:”+ex.getMessage();
}
返回味精;
}
@凌驾
受保护的void onPostExecute(字符串msg){
Log.e(“注销”,msg);
}
}.执行(空,空,空);
}
需要你的帮助!!提前谢谢

unregister()
也在阻塞,就像
register()
一样。因此,您确实需要在后台线程中运行它,就像在异步任务中运行一样

您可以在GCM实例上调用它,因此我认为只要您有
GCM
实例,就可以在任何活动中调用它

您可能希望在实现注销功能之前阅读

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);
    }