首页
学习
活动
专区
圈层
工具
发布

Gcm注销
EN

Stack Overflow用户
提问于 2014-03-24 17:47:02
回答 1查看 142关注 0票数 0

我在android上从事GCM的工作。通过使用以下异步注册设备的代码,我完成了设备到GCM的注册。

代码语言:javascript
复制
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中完成,现在我想注销设备。注销命令由服务端app发送,android端接收。如何从处理收到消息的活动(mdmActivity)中注销设备。应该是asyn还是sync?

为registrationActivity创建一个对象并使用该对象从mdmActivity调用unregisterInBackground函数是错误的吗?

代码语言:javascript
复制
 RegistrationActivity reg=new RegistrationActivity();
 reg.unregisterInBackground();

registrationActivity中的unregisterInBackground函数如下:

代码语言:javascript
复制
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);
    }

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

EN

回答 1

Stack Overflow用户

发布于 2015-03-01 06:00:25

register()一样,unregister()也在阻塞。因此,您真的需要在后台线程中运行它,类似于使用AsyncTask的方式。

您是在GCM实例上调用它的,所以我认为只要您有那个gcm实例,就可以从任何活动调用它。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22605789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档