2016-05-14 7 views
0

Ich verwende GCM, um Daten von meinem Server an meine App zu senden. Das Messaging funktioniert einwandfrei. Ich erhalte jede Massage sofort auf meinem Gerät. Allerdings ist das Problem: Es funktioniert nicht, wenn das Display meines Smartphones ausgeschaltet ist. Vielleicht hat es am Ende. mit meinem Smartphone zu tun? Ich benutze Android 5 und Benachrichtigungen von anderen Anwendungen funktionieren gut (wie WhatsApp).Android empfängt GCM, während das Display ausgeschaltet ist

Serverdaten:

{ 
"data": { 
"id": "5", 
"message": "test" 
}, 
"registration_ids": ["myRegId"], 
"priority": "high" 
} 

Manifest:

... 
     <receiver 
      android:name="com.google.android.gms.gcm.GcmReceiver" 
      android:exported="true" 
      android:permission="com.google.android.c2dm.permission.SEND" > 
      <intent-filter> 
       <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
       <category android:name="com.example.gcm" /> 
      </intent-filter> 
     </receiver> 
     <service 
      android:name=".GcmMessageHandler" 
      android:exported="false" > 
      <intent-filter> 
       <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
      </intent-filter> 
     </service> 
    </application> 
    <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.asdf.myapp.gcm.permission.C2D_MESSAGE" android:protectionLevel="signature" /> 
    <uses-permission android:name="com.asdf.myapp.gcm.permission.C2D_MESSAGE" /> 

Empfänger:

public class GcmMessageHandler extends GcmListenerService { 
    @Override 
    public void onMessageReceived(String from, Bundle data) { 
     Log.d("test", "message received"); 
    } 
} 

Antwort

0

ich bemerkt, dass das Problem tritt nur auf, wenn ich mein WLAN verbunden bin. Wenn WLAN deaktiviert ist, bekomme ich die GCM-Nachricht, egal was passiert. Ich habe diesen reddit-Beitrag gelesen und bin seinen Anweisungen gefolgt, die meine Probleme zu lösen schienen.

Reddit

0

Ihre receiver Klasse sollte von WakefulBroadcastReceiver erweitern, um zu gewährleisten, dass die CPU wach ist, so dass Ihre Zuhörer Der Dienst kann seine Aufgabe auch dann abschließen, wenn das Gerät gesperrt ist.

Manifest

<permission 
    android:name="com.oostaa.app.permission.C2D_MESSAGE" 
    android:protectionLevel="signature" /> 

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

<receiver 
    android:name=".receiver.GcmBroadcastReceiver" 
    android:permission="com.google.android.c2dm.permission.SEND"> 
     <intent-filter> 
     <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
     <category android:name="com.oostaa.app" /> 
     </intent-filter> 
</receiver> 

Hinweis: com.oostaa.app ist mein Paketnamen.

Empfänger:

public class GcmBroadcastReceiver extends WakefulBroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     ComponentName comp = new ComponentName(context.getPackageName(), 
      GcmIntentService.class.getName()); 
     startWakefulService(context, (intent.setComponent(comp))); 
     setResultCode(Activity.RESULT_OK); 
    } 
} 
+0

Noch gleiche Problem .. – Ant1Zykl0n

Verwandte Themen