2012-11-23 8 views
7

Czy istnieje sposób sprawdzenia, czy użytkownik dodał swoje konto Google na swoim urządzeniu przed rozpoczęciem procedury rejestracji GCM API 8?Jak sprawdzić, czy konta google zostały dodane do urządzenia przed rozpoczęciem procedury GCM?

podczas próby rejestracji bez niego aplikację daje ostrzeżenie niespodziewanie zatrzymana podczas zamykania, tak jak najpierw sprawdzić, ostrzegać użytkownika i zamknąć aplikację.

+0

(this);' nie obsługuje tego scenariusza? – CommonsWare

+0

O ile wiem to tylko sprawdza, czy urządzenie obsługuje GCM, nie kontrolując konto ... – Harry

+0

Cóż, teraz, że śmierdzi. Przypuszczalnie istnieje sposób za pośrednictwem 'AccountManager', aby dowiedzieć się, czy istnieje konto Google, ale jeszcze nie grałem z żadnym z nich. – CommonsWare

Odpowiedz

16

musiałem spojrzeć na źródło checkDevice() i tak daleko, jak widzę to tylko sprawdza poziom API i że pakiet GCM jest na urządzeniu. Więc co wynika z sugestii CommonsWare, ten kod pojawia się do pracy dla mnie:

private boolean deviceHasGoogleAccount(){ 
     AccountManager accMan = AccountManager.get(this); 
     Account[] accArray = accMan.getAccountsByType("com.google"); 
     return accArray.length >= 1 ? true : false; 
} 

Musisz linię

<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 

w oczywisty

+0

Dzięki, również to sprawdzę i wrócę ... – Harry

+0

Twoje rozwiązanie działa, dzięki Holandii! – Harry

+1

API 23 i powyżej trzeba poprosić o uprawnieniach w czasie rzeczywistym i nie tylko określić ją w manifeście – RPM

0

za pytanie o tym, jak złapać wyjątek:

try 
{ 
    GCMRegistrar.checkDevice(context); 
    System.out.println("Device has GCM capabilities. So registering for GCM"); 
    //// write code here to register for GCM 
} 
catch(Exception e) 
{ 
    System.out.println("Cannot cregister for GCM"); 
} 

Jest to logika do wychwytywania wyjątków. Więc jeśli jakikolwiek wyjątek jest wrzucony po wypróbowaniu, to kod po części zostanie wykonany. checkDevice() zgłasza wyjątek. Jeśli nie zauważysz wyjątku, aplikacja się zawiesi.

Również nie sądzę składnia jest poprawne, ale kod ten daje pojęcie o tym, co zrobić.

+0

Dzięki, będę go Examen i dać odpowiedź ... – Harry

+0

nie ma problemu, po prostu daj mi znać, jeśli to nie działa .. . –

+0

Nie, to nie działa. Dostaję się do LogCat "Urządzenie ma możliwości GCM, więc rejestruję się w GCM", ale później pojawia się "Błąd rejestracji: ACCOUNT_MISSING". – Harry

3

Trzeba zweryfikować odpowiedź dostałem od GCM, jeśli się ACCOUNT_MISSING następnie można obsłużyć błędu.

w twojej GCMIntentService Class masz metod takich jak onRegistered() onUnregistered() onMessage() onError() w twojej metody

/** 
* Method called on Error 
* */ 
@Override 
public void onError(Context context, String errorId) { 
    Log.i(TAG, "Received error: " + errorId); 
    // HANDLE IF GCM SERVER SENT ERROR MESSAGES.! 
} 

enter image description here

onError() Więcej informacji na temat obsługi błędów sprawdzenia `GCMRegistrar.checkDevice Documentation

Powiązane problemy