6

Estoy trabajando en mi primera aplicación Android para usar el servicio Google Cloud Messaging (GCM) para notificaciones automáticas. Llegué al punto en que puedo enviar con éxito un mensaje desde mi aplicación de servidor y registrar el contenido del mensaje en el evento onMessage dentro de mi clase GCMIntentService en la aplicación cliente. Sin embargo, no veo ninguna indicación visual en el dispositivo de que se recibió un mensaje. Esperaba que el mensaje apareciera en la lista de notificaciones desplegables del teléfono, como lo hace en el iPhone. ¿Tiene que codificarse manualmente? ¿Existe también un método común para mostrar el mensaje, independientemente de qué actividad esté activa actualmente, y si la aplicación está inactiva en segundo plano? Cualquier ayuda apreciada.Android: las notificaciones automáticas GCM no aparecen en la lista de notificaciones

Respuesta

7

Este código generará una notificación en la barra del sistema de Android en la parte superior de la pantalla. Este código creará una nueva intención que dirigirá al usuario a un "Home.class" después de hacer clic en la notificación en la barra superior. Si desea hacer algo específico en función de la actividad actual, puede enviar solicitudes de difusión desde GCMIntentService a sus otras actividades.

Intent notificationIntent=new Intent(context, Home.class); 
generateNotification(context, message, notificationIntent); 

private static void generateNotification(Context context, String message, Intent notificationIntent) { 
    int icon = R.drawable.icon; 
    long when = System.currentTimeMillis(); 
    NotificationManager notificationManager = (NotificationManager) 
      context.getSystemService(Context.NOTIFICATION_SERVICE); 
    Notification notification = new Notification(icon, message, when); 
    String title = context.getString(R.string.app_name); 

    // set intent so it does not start a new activity 
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | 
      Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    PendingIntent intent =PendingIntent.getActivity(context, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
    notification.setLatestEventInfo(context, title, message, intent); 
    notification.flags |= Notification.FLAG_AUTO_CANCEL; 
    notificationManager.notify(0, notification); 
} 

Tenga en cuenta que este ejemplo utiliza los recursos en R.drawable y R.String que deben estar presentes para trabajar, pero hay que darle la idea. Consulte esto para obtener más información sobre las notificaciones de estado http://developer.android.com/guide/topics/ui/notifiers/index.html y sobre los receptores de difusión. http://developer.android.com/reference/android/content/BroadcastReceiver.html

+0

eso es fantástico, muchas gracias. –

+0

Hola, he usado este complemento https://github.com/marknutter/GCM-Cordova y he seguido todas las instrucciones. sin embargo, solo puedo recibir mensajes cuando estoy dentro de la aplicación, pero no puedo conseguir que la aplicación muestre notificaciones en el área de notificación de androides. por favor avise. Uso este plugin porque uso phonegap @ Zachary Moshansky –

+0

Lo siento pero nunca he usado Phonegap y no puedo comentar cómo hacer que las notificaciones funcionen con él –

1

Si está utilizando GcmListenerService puede utilizar este código, añadir a su onMessageReceived la SendNotification()

@Override 
public void onMessageReceived(String from, Bundle data) { 
     String message = data.getString("message"); 
     sendNotification(message); 
} 

private void sendNotification(String message) { 
     Intent intent = new Intent(this, YOURCLASS.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 
     PendingIntent.FLAG_ONE_SHOT); 

     Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
       .setSmallIcon(R.drawable.ic_park_notification) 
       .setContentTitle("Ppillo Message") 
       .setContentText(message) 
       .setAutoCancel(true) 
       .setSound(defaultSoundUri) 
       .setContentIntent(pendingIntent); 

     NotificationManager notificationManager = 
       (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

     notificationManager.notify(0 /* ID of notification */, notificationBuilder.build()); 
    } 
Cuestiones relacionadas