GCM: Cómo enviar latido al servidor GCM
Quiero enviar un latido de mi aplicación al servidor GCM, para que la conexión se mantenga viva.
¿Cómo puedo hacer eso, y cómo puedo saber la URL de mi servidor de GCM ??
- FileNotFoundException con Universal Image Loader
- Extraer el archivo AndroidManifest.xml de apk usando sólo Java
- ActionBarActivity: no se puede resolver con un tipo
- Encriptación de Android
- Comunicación TCP de Android con C # Server -> socket.Close
¡¡Gracias por adelantado!!
- Scala logra un buen rendimiento en Android? (Junio de 2011)
- En Java, ¿cómo verifica si una variable float es null?
- ¿Cuál es el propósito de las categorías de intención?
- Java Singleton + clase interna mal entendida
- Envío de un objeto serializado de Android a un servlet utilizando cliente HTTP
- Cómo obtener mi hotspot wifi ssid en mi sistema android actual
- La aplicación de Android se bloquea después de la versión de actualización de las herramientas de SDK (NoClassDefFound, versión de la herramienta 22)
- ¿Cómo implementar correctamente un listview personalizado con imágenes usando la biblioteca de Picasso?
Cómo enviar el latido del corazón
Esta clase puede enviar las intenciones apropiadas
public class GcmKeepAlive { protected CountDownTimer timer; protected Context mContext; protected Intent gTalkHeartBeatIntent; protected Intent mcsHeartBeatIntent; public GcmKeepAlive(Context context) { mContext = context; gTalkHeartBeatIntent = new Intent( "com.google.android.intent.action.GTALK_HEARTBEAT"); mcsHeartBeatIntent = new Intent( "com.google.android.intent.action.MCS_HEARTBEAT"); } public void broadcastIntents() { System.out.println("sending heart beat to keep gcm alive"); mContext.sendBroadcast(gTalkHeartBeatIntent); mContext.sendBroadcast(mcsHeartBeatIntent); } }
si sólo desea enviar el latido del corazón puede hacer lo siguiente en una actividad
GcmKeepAlive gcmKeepAlive = new GcmKeepAlive(this); gcmKeepAlive.broadcastIntents();
No creo que necesites establecer permisos adicionales para esto, pero aquí están los permisos relacionados con gcm que tengo en mi manifiesto
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <permission android:name=your_package_name.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="your_package_name.permission.C2D_MESSAGE" />
Una forma de enviar los latidos del corazón de forma regular
Si desea enviarlos de forma regular, aquí es cómo estoy haciendo eso:
public class GcmKeepAliveBroadcastReceiver extends BroadcastReceiver { private GcmKeepAlive gcmKeepAlive; @Override public void onReceive(Context context, Intent intent) { System.out.println("inside gcm keep alive receiver"); gcmKeepAlive = new GcmKeepAlive(context); gcmKeepAlive.broadcastIntents(); } }
También tengo un servicio que tiene un Dagger inyectado alarmmanger y pendingintent
@Inject AlarmManager alarmManager; @Inject PendingIntent gcmKeepAlivePendingIntent; alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 1000, 4*60*1000, gcmKeepAlivePendingIntent);
Aquí está la sección del módulo Dagger que proporciona el administrador de alarmas y la intención pendiente. Hay varias maneras de tener un administrador de alarmas periódicamente llamar a un método, por lo que suponiendo que no utilice Dagger, todavía debe ser capaz de sacar las partes pertinentes. Su pregunta era cómo enviar el latido del corazón, no cómo usar un administrador de alarmas. Hay un montón de respuestas a que ya lo busque en eso.
@Provides PendingIntent provideGcmKeepAlivePendingIntent() { System.out.println("pending intent provider"); Intent gcmKeepAliveIntent = new Intent("com.gmail.npnster.first_project.gcmKeepAlive"); return PendingIntent.getBroadcast(mContext, 0, gcmKeepAliveIntent, PendingIntent.FLAG_CANCEL_CURRENT); } @Provides AlarmManager provideGcmKeepAliveAlarmManager() { return (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE); }
- Escaneo de códigos de barras / código de barras de ZXing QR
- Diferencia entre carpetas de valores en Android