无法在Android中取消注册GCM

时间:2015-07-14 02:57:49

标签: android google-cloud-messaging

我试图在用户注销时取消注册GCM。我使用以下代码来完成它。

public void logout(){

        GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(NewSettings.this);
        try {
            gcm.unregister();
        } catch (IOException e) {
            e.printStackTrace();
            e.toString();
            Toast.makeText(NewSettings.this,"Problem in logout, try again later!",Toast.LENGTH_LONG).show();
        }
}

这不会取消注册GCM,因为我在logcat中收到例外情况

07-14 10:54:20.718  26537-26537/com.artqueen.aahaan W/System.err﹕ java.io.IOException: MAIN_THREAD
07-14 10:54:20.718  26537-26537/com.artqueen.aahaan W/System.err﹕ at com.google.android.gms.gcm.GoogleCloudMessaging.unregister(Unknown Source)
07-14 10:54:20.718  26537-26537/com.artqueen.aahaan W/System.err﹕ at com.artqueen.aahaan.Activities.NewSettings.logout(NewSettings.java:157)
07-14 10:54:20.718  26537-26537/com.artqueen.aahaan W/System.err﹕ at com.artqueen.aahaan.Activities.NewSettings$7.onClick(NewSettings.java:120)
07-14 10:54:20.718  26537-26537/com.artqueen.aahaan W/System.err﹕ at android.view.View.performClick(View.java:5254)
07-14 10:54:20.718  26537-26537/com.artqueen.aahaan W/System.err﹕ at android.view.View$PerformClick.run(View.java:21173)
07-14 10:54:20.718  26537-26537/com.artqueen.aahaan W/System.err﹕ at android.os.Handler.handleCallback(Handler.java:739)
07-14 10:54:20.718  26537-26537/com.artqueen.aahaan W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:95)
07-14 10:54:20.718  26537-26537/com.artqueen.aahaan W/System.err﹕ at android.os.Looper.loop(Looper.java:145)
07-14 10:54:20.718  26537-26537/com.artqueen.aahaan W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:6837)
07-14 10:54:20.718  26537-26537/com.artqueen.aahaan W/System.err﹕ at java.lang.reflect.Method.invoke(Native Method)
07-14 10:54:20.718  26537-26537/com.artqueen.aahaan W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:372)
07-14 10:54:20.718  26537-26537/com.artqueen.aahaan W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
07-14 10:54:20.718  26537-26537/com.artqueen.aahaan W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)

文档提及

documentation

所以我也尝试使用这个

 public void logout(){

        InstanceID instanceID  = InstanceID.getInstance(NewSettings.this);
        try {
            instanceID.deleteInstanceID();
        } catch (IOException e) {
            e.printStackTrace();
            e.toString();
            Toast.makeText(NewSettings.this,"Problem in logout, try again later!",Toast.LENGTH_LONG).show();
        }

}

我仍在logcat

中收到此信息
07-14 11:02:03.228  31682-31682/com.artqueen.aahaan W/System.err﹕ java.io.IOException: MAIN_THREAD
07-14 11:02:03.238  31682-31682/com.artqueen.aahaan W/System.err﹕ at com.google.android.gms.iid.InstanceID.zzb(Unknown Source)
07-14 11:02:03.238  31682-31682/com.artqueen.aahaan W/System.err﹕ at com.google.android.gms.iid.InstanceID.deleteInstanceID(Unknown Source)
07-14 11:02:03.238  31682-31682/com.artqueen.aahaan W/System.err﹕ at com.artqueen.aahaan.Activities.NewSettings.logout(NewSettings.java:158)
07-14 11:02:03.238  31682-31682/com.artqueen.aahaan W/System.err﹕ at com.artqueen.aahaan.Activities.NewSettings$7.onClick(NewSettings.java:121)
07-14 11:02:03.238  31682-31682/com.artqueen.aahaan W/System.err﹕ at android.view.View.performClick(View.java:5254)
07-14 11:02:03.238  31682-31682/com.artqueen.aahaan W/System.err﹕ at android.view.View$PerformClick.run(View.java:21173)
07-14 11:02:03.238  31682-31682/com.artqueen.aahaan W/System.err﹕ at android.os.Handler.handleCallback(Handler.java:739)
07-14 11:02:03.238  31682-31682/com.artqueen.aahaan W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:95)
07-14 11:02:03.238  31682-31682/com.artqueen.aahaan W/System.err﹕ at android.os.Looper.loop(Looper.java:145)
07-14 11:02:03.238  31682-31682/com.artqueen.aahaan W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:6837)
07-14 11:02:03.238  31682-31682/com.artqueen.aahaan W/System.err﹕ at java.lang.reflect.Method.invoke(Native Method)
07-14 11:02:03.238  31682-31682/com.artqueen.aahaan W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:372)
07-14 11:02:03.238  31682-31682/com.artqueen.aahaan W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
07-14 11:02:03.238  31682-31682/com.artqueen.aahaan W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)

我是否以正确的方式取消注册GCM?请让我知道如何实现它。提前谢谢。

2 个答案:

答案 0 :(得分:3)

我需要在一个新线程中运行它。这解决了我的问题。 谢谢@calvinfly。

public void logout(){

        instanceID  = InstanceID.getInstance(NewSettings.this);

        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    instanceID.deleteInstanceID();
                } catch (Exception bug) {
                    bug.printStackTrace();
                }

            }
        });
        thread.start();
}

答案 1 :(得分:-1)

尝试此操作以取消注册GCM。 GCMRegistrar.unregister(getApplicationContext());

相关问题