Cómo ejecutar GcmListenerService en primer plano

Tengo un problema a veces con mi servicio de GCM que está cerrado cuando la memoria RAM de mi teléfono inteligente se borra automáticamente (lea esto si necesita más detalles).

Por lo que entiendo si configuro mi servicio para ejecutar en primer plano, debería ayudar al sistema a eliminarlo con RAM. El método de onStartCommand() suele utilizarse para ejecutar el método startForeground() .

Pero con la última versión de la implementación de GCM es imposible ya que el método onStartCommand() de la GCMListenerService.class se define como final y no puedo anularlo.

Entonces, ¿cómo puedo configurar mi receptor gcm a ron en primer plano?

Aquí está mi parte manifiesta sobre GCM.

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="my.app.path" > <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <!-- ... other permissions --> <permission android:name="my.app.path.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="my.app.path.permission.C2D_MESSAGE" /> <application ...> <!-- ... activites... --> <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="my.app.path" /> </intent-filter> </receiver> <service android:name=".MyGcmListener" android:exported="false" android:enabled="true" > <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> </intent-filter> </service> </application> </manifest> 

Gracias de antemano.

Esta pregunta es bastante antigua, pero creo que vale la pena responder por el beneficio de los futuros lectores.

Con GCM (o el nuevo FCM) NO NECESITA mantener GCMListenerService en primer plano.
De hecho, no hay necesidad de mantener la aplicación en marcha en absoluto.

Cuando el sistema recibe un mensaje GCM, se iniciará la aplicación y se ejecutará el servicio relevante (GCMListenerService en GCM o FirebaseMessagingService en FCM).

La verdadera cuestión planteada por este post es:
Los mensajes GCM no llegan cuando la aplicación no se está ejecutando.

Esto se debe a una característica especial de xiaomi que bloquea los mensajes de GCM.
Vea: Autostar lista blanca dentro de la sección Seguridad.
http://en.miui.com/thread-117992-1-1.html

  • Excepción de estado ilegal al intentar cambiar un marcador en un Api de Google Maps v2 desde un mensaje de Google Cloud Messaging
  • Iniciador de backend móvil ausente de la consola de nube
  • Intervalo de IP del servidor de notificación de Google GCM push?
  • Parse push notificación token del dispositivo android no guardado en algunos casos
  • ¿Qué es authorizedEntity? No se puede encontrar gcm_defaultSenderId en la propia aplicación.
  • ID de registro canónico y formato ID de mensaje
  • Mensajería en la nube de Google para Android (GCM) e identificador de emisión incorrecta
  • Mensaje de error del proyecto de ejemplo de GCM "No se pudo encontrar google-play-services_lib.apk"
  • GCM: por qué mi aplicación se bloquea en GCMRegistrar.checkDevice (this);
  • Tener Servicios de Google (gcm) en un módulo aparte en Android
  • No se pudo resolver com.google.firebase: firebase-core: 10.0.1
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.