2016-05-28 7 views
2

In AndroidManifest.xml geschlossen I definiert haben die folgenden KomponentenGCMListenerService tut aufgerufen werden, wenn app

<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.admin.freddyspeaks" /> 
      </intent-filter> 
     </receiver> 

     <service 
      android:name="com.admin.services.NodeGcmListenerService" 
      android:exported="false"> 
      <intent-filter> 
       <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
      </intent-filter> 
     </service> 
     <service 
      android:name="com.admin.services.MyInstanceIDListenerService" 
      android:exported="false"> 
      <intent-filter> 
       <action android:name="com.google.android.gms.iid.InstanceID" /> 
      </intent-filter> 
     </service> 
     <service 
      android:name="com.admin.services.RegistrationIntentService" 
      android:exported="false" /> 

NodeGcmListenerService.java

class NodeGcmListenerService extends GcmListenerService { 

    @Override 
    public void onMessageReceived(String from, Bundle data) { 
     String message = data.getString("message"); 
     Log.d("", "From: " + from); 
     Log.d("", "Message: " + message); 
     //Set data 
    } 

} 

MyInstanceIDListenerService.java

public class MyInstanceIDListenerService extends InstanceIDListenerService { 

    @Override 
    public void onTokenRefresh() { 
     // Fetch updated Instance ID token and notify our app's server of any changes (if applicable). 
     Intent intent = new Intent(this, RegistrationIntentService.class); 
     startService(intent); 
    } 
} 

Und hier ist RegistrationIntentService.java

public class RegistrationIntentService extends IntentService { 

    private static final String TAG = "RegIntentService"; 

    public RegistrationIntentService() { 
     super(TAG); 
    } 

    @Override 
    public void onHandleIntent(Intent intent) { 
     try { 
      InstanceID instanceID = InstanceID.getInstance(this); 
      String token = instanceID.getToken(getString(R.string.gcm_defaultSenderId), 
        GoogleCloudMessaging.INSTANCE_ID_SCOPE, null); 
      sendRegistrationToServer(token); 
     } 
     catch(IOException e) { 
      Log.e(TAG,"Unable to register device",e); 
     } 
    } 
} 

NodeGcmListenerService onMessage Methode namens doesnt zu erhalten, wenn ich Nachricht von Server zu senden und wenn die App Kraft geschlossen ist

+0

Im Blick auf das gleiche Problem. –

Antwort

1

GCMListenerService genannt doesnt zu erhalten, wenn app Kraft

Wenn App geschlossen ist Ist Kraft geschlossen, bedeutet das wörtlich. Es sind keine normalen Lifecycle-Anrufe garantiert. Deine App hat sich schlecht benommen und wird jetzt sofort abgeschossen. Das System wird Reste bereinigen, aber Ihr Code hat nichts mehr zu tun.

PS: Stapelverfolgung nach dem Absturz prüfen.

+0

Mit Gewalt schließen bedeutet, dass die App im geschlossenen Zustand ist und nicht im Hintergrund läuft. Genau wie wenn alle Hintergrund-Apps durch langes Drücken der Home-Taste geschlossen werden und über die Apps streichen, die wir nicht im Hintergrund laufen lassen wollen. In diesem Fall habe ich auch Benachrichtigungen über diese App in der Benachrichtigungsleiste gesehen. –

+1

Was können wir tun, um eine Benachrichtigung zu erhalten, selbst wenn die App nicht geöffnet ist? –

Verwandte Themen