2013-07-23 20 views
6

Utworzono usługę zamiaru GCM i urządzenie jest pomyślnie rejestrowane. Otrzymuję również intencję REGISTRATION, ale metody OnMessage lub OnRegistered nie są wywoływane.GCM Intent Usługa OnRegistered nie jest wywoływana

Poniżej logu widzę.

07-23 06:24:23.542: V/GCMBroadcastReceiver(1168): onReceive: com.google.android.c2dm.intent.REGISTRATION 
07-23 06:24:23.542: V/GCMBroadcastReceiver(1168): GCM IntentService class: com.app.demo.myApp.GCMIntentService 
07-23 06:24:23.581: V/GCMBaseIntentService(1168): Acquiring wakelock 

Poniżej znajduje się kod dla OnMessage.

Czy ktoś może mi pomóc, dlaczego OnRegistered lub OnMessage nie jest wywoływana.

public class GCMIntentService extends GCMBaseIntentService { 



    @Override 
    protected void onMessage(Context arg0, Intent arg1) { 
     // TODO Auto-generated method stub 
     Toast.makeText(getApplicationContext(), "registered", Toast.LENGTH_LONG).show(); 
     String device_id = GCMRegistrar.getRegistrationId(this); 
     GSLogger.Log("mess_received", device_id); 
    } 

    @Override 
    protected void onRegistered(Context context, String arg1) { 
     Toast.makeText(context, "registered", Toast.LENGTH_LONG).show(); 
     String device_id = GCMRegistrar.getRegistrationId(this); 
     GSLogger.Log("registered", device_id); 

    } 

} 

Kod Oczywisty:

<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="8" /> 

    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.READ_CALENDAR" /> 
    <uses-configuration android:name="android.permission.GET_ACCOUNTS"/> 
    <uses-permission android:name="com.google.android.c2dm.permission.C2D_MESSAGE"/> 


    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
    <permission android:name="com.app.demo.myApp.permission.C2D_MESSAGE" 
     android:protectionLevel="signature" /> 
    <uses-permission android:name="com.app.demo.myApp.permission.C2D_MESSAGE" /> 

Kod Odbiornik w manifeście:

<receiver 
      android:name="com.google.android.gcm.GCMBroadcastReceiver" 
      android:permission="com.google.android.c2dm.permission.SEND" > 
      <intent-filter> 
       <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
       <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 
       <category android:name="com.app.demo.myApp" /> 
      </intent-filter> 
     </receiver> 
     <service android:name="com.app.demo.myApp.GCMIntentService" /> 

Pic z moim pakiecie: enter image description here

+0

Pokaż mój kod manifest.xml –

+0

Zaktualizowano kod manifestu. Ponieważ widzę Dziennik OnReceived GCMBroadCastReciver, uważam, że nie powinno być problemu w Manifest. – Raghav

Odpowiedz

24

Problem jest

<service android:name="com.app.demo.myApp.GCMIntentService" /> 

Dajcie

<service android:name=".GCMIntentService" /> 

i umieść plik GCMIntentService Java w katalogu określonego przez nazwę pakietu w oczywisty.

Na przykład jeśli zadeklarowali com.app.demo.myApp jako nazwę pakietu aplikacji

Skieruj GCMIntentService w tej samej strukturze folderów.

+0

Po usunięciu nazwy pakietu z usługi, pojawia się błąd rejestracji Błąd rejestracji: AUTHENTICATION_FAILED – Raghav

+0

czy dodano GCMIntentService w odpowiednim miejscu w pakiecie? – Nargis

+0

Umieściłem go w tym samym pakiecie w folderze src, tak jak wszystkie inne pliki .java. Czy to właściwa lokalizacja? – Raghav

2

widzę pewne potencjalne problemy ze swoim manifeście, choć nie jestem pewien, czy są one przyczyną do problemów:

Poniższa nie jest wymagane:

<uses-permission android:name="com.google.android.c2dm.permission.C2D_MESSAGE"/> 

Masz już prawidłowa pozwolenie C2D_MESSAGE:

<permission android:name="com.app.demo.myApp.permission.C2D_MESSAGE" 
    android:protectionLevel="signature" /> 
<uses-permission android:name="com.app.demo.myApp.permission.C2D_MESSAGE" /> 

Ponadto GCM jest obsługiwany z poziomu API 8, więc prawdopodobnie nie powinien określać android:minSdkVersion="7"

+1

W niektórych przykładowych projektach powtarzano dwa pozwolenia i nadmiarowe. Dobra racja, usunięcie drugiego wydawało się naprawić mój problem – voghDev

2

Upewnij się, że umieściłeś GCMIntentService w folderze głównym. Nie umieszczaj go w żadnym podfolderze, a będzie działać. Miałem ten sam problem i zaczęło działać.

+0

To też znalazłem, ale dlaczego do cholery ...? – Micro

Powiązane problemy