1

Ich habe folgendes Manifest -GcmListenerService onMessageReceived nur aufgerufen, wenn App im Vordergrund ist

<service 
    android:name=".RegistrationIntentService" 
    android:exported="false" /> 

<service 
    android:name=".TestGcmListenerService" 
    android:exported="false"> 
    <intent-filter> 
     <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
     <category android:name="com.example.test" /> 
    </intent-filter> 
</service> 

<service 
    android:name=".RegistrationIDListenerService" 
    android:exported="false"> 
    <intent-filter> 
     <action android:name="com.google.android.gms.iid.InstanceID" /> 
    </intent-filter> 
</service> 

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

Und nach onMessageReceived Methode -

@Override 
    public void onMessageReceived(String from, Bundle data) { 
     ObjectMapper objectMapper = new ObjectMapper(); 
     Message message; 
     try { 
      message = objectMapper.readValue(String.valueOf(data.get("message")), Message.class); 
      MessageNotification.notify(this, message, 1); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

Was ist passiert, onMessageReceived nur aufgerufen wird, wenn App im Vordergrund steht. Andernfalls wird es nicht aufgerufen und die Benachrichtigung wird nicht angezeigt. Wenn ich die App öffne, werden alle Benachrichtigungen gleichzeitig angezeigt.

Nicht GcmListenereService Gerät aufwachen, wenn gesperrt und die Arbeit machen? Wie löst man das?

Antwort

1

Google hat herumgegoogelt und es geschafft, diesen Thread auf github zu finden, der ziemlich genau der gleiche ist wie Ihr Anliegen, wo onMessageReceived() is only called when app is on foreground. Der Grund war, weil nur Benachrichtigungsnachrichten gesendet werden. Gemäß der Beschreibung in dem Thread enthalten:

Benachrichtigungsmeldungen - diese sollen eine Benachrichtigung ohne Zwischenverarbeitung von der Anwendung erzeugen. Sie haben onMessageReceived nur gefunden, wenn die App ausgeführt wird.

Datennachrichten - diese sollen leise passieren Daten an den Messaging-App-Dienst. Sie trafen onMessageReceived, auch wenn die App im Hintergrund ist. Der Dienst kann dann auswählen, eine Benachrichtigung mithilfe der normalen Systembenachrichtigungs-APIs zu generieren, oder er kann die Nachricht stillschweigend behandeln.

Ich denke, Sie senden Benachrichtigungsmeldungen während das Verhalten für Datenmeldungen erwarten zu treten.

Hier ist auch die SO post of Shiprack im Github Thread erwähnt. Hoffe das hilft. Viel Glück.