Ich muss einige benutzerdefinierte Push-Benachrichtigungen erstellen und anzeigen (müssen einige Daten weitergeben und öffnen bestimmte Aktivitäten, wenn Sie darauf klicken) in meiner Anwendung. Ich habe alles wie beschrieben here getan.Warum wird mein GcmListenerService.onMessageReceived nicht aufgerufen, wenn App nicht ausgeführt wird?
Wenn die Anwendung läuft, funktioniert alles wie erwartet. Aber wenn es im Hintergrund ist, wird mein Dienst nicht gestartet und ich bekomme eine Push-Benachrichtigung, die mich zum Startbildschirm der App bringt.
Ich recherchierte viel, fand aber keine Erklärung für dieses Verhalten. Kann mir bitte jemand sagen, warum mein Service ignoriert wird, wenn die Anwendung im Hintergrund läuft?
Dies ist in meiner Manifest-Datei:
<permission
android:name="com.locdel.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="com.locdel.permission.C2D_MESSAGE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
......................
<application
android:name=".LocdelApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<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.locdel" />
</intent-filter>
</receiver>
<service
android:name="com.locdel.gcm.LocdelGcmListenerService"
android:exported="false">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
</intent-filter>
</service>
<service
android:name="com.locdel.gcm.LocdelIDListenerService"
android:exported="false">
<intent-filter>
<action android:name="com.google.android.gms.iid.InstanceID" />
</intent-filter>
</service>
<service
android:name=".gcm.RegistrationIntentService"
android:exported="false" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
</intent-filter>
</service>
.......................
Ich habe sogar versucht, meine eigenen wakeful Rundfunkempfänger zu erweitern und Service explizit starten. Dies ist OnReceive Methode des benutzerdefinierten Empfänger, die eigentlich genannt wird, aber der Service war wieder nicht gestartet:
@Override
public void onReceive(Context context, Intent intent) {
Intent serviceIntent = new Intent(context, LocdelGcmListenerService.class);
serviceIntent.setAction("com.google.android.c2dm.intent.RECEIVE");
serviceIntent.putExtras(intent.getExtras());
startWakefulService(context, serviceIntent);
setResultCode(Activity.RESULT_OK);
}
Hallo, Können Sie zeigen, wie Sie den Dienst in Ihrer manifest.xml und den Code des Dienstes auch erklärt haben? –
Meine Frage wurde aktualisiert. Code im Service ist eigentlich egal. Ich habe die Methode onMessageReceived überschrieben und einige Logs dort eingefügt. Daher weiß ich, dass der Dienst überhaupt nicht gestartet wurde. – shift66
Welche Berechtigungen haben Sie in der Manifestdatei angegeben? – AndiM