2015-07-14 2 views
1

Я пытаюсь отменить регистрацию GCM при выходе пользователя из системы. Для этого я использую следующий код.Невозможно отменить регистрацию GCM в Android

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 в правильном пути? Пожалуйста, дайте мне знать, как я могу это достичь. Заранее спасибо.

+0

Вы можете запустить 'unregister' в' AsyncTask', см. [This] (http://stackoverflow.com/questions/17721541/new-gcm-api-register-unknown-source-error) – calvinfly

+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

Попробуйте это, чтобы отменить регистрацию GCM. GCMRegistrar.unregister (getApplicationContext());

+0

'gcm.unregister()' устарел 28 мая 2015 года. – Michael

Смежные вопросы