notification - Android: reciba la notificación de inserción y muéstrela, no del todo comprendida
push notifications android (2)
Ok, finalmente tengo la configuración para registrar dispositivos para notificaciones push. Encontré este código para recibir nuevas notificaciones y mostrarlas. La cosa es que no estoy seguro de a dónde va. Soy bastante nuevo en la programación de Android por lo que cualquier ayuda es apreciada. Tengo una clase de servicio llamada GCMService a continuación.
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import com.google.android.gcm.GCMBaseIntentService;
public class GCMService extends GCMBaseIntentService {
private static final String TAG = "GCMService";
public GCMService() {
super();
}
@Override
protected void onRegistered(Context context, String regId) {
Log.i(TAG, "Device registered: regId= " + regId);
}
@Override
protected void onUnregistered(Context context, String regId) {
Log.i(TAG, "Device unregistered");
}
@Override
protected void onMessage(Context context, Intent intent) {
Log.i(TAG, "Received message");
}
@Override
public void onError(Context context, String errorId) {
Log.i(TAG, "Received error: " + errorId);
}
@Override
protected boolean onRecoverableError(Context context, String errorId) {
Log.i(TAG, "Received recoverable error: " + errorId);
return super.onRecoverableError(context, errorId);
}
}
¿A dónde va la función a continuación en relación con mi clase anterior para recibir un nuevo mensaje?
private static void generateNotification(Context context, String message) {
int icon = R.drawable.ic_launcher;
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);
Intent notificationIntent = new Intent(context, LauncherActivity.class);
PendingIntent pintent = PendingIntent.getActivity(context, 0, intent,
Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
notification.setLatestEventInfo(context, title, message, intent);
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notification.defaults |= Notification.DEFAULT_SOUND;
notification.defaults |= Notification.DEFAULT_VIBRATE;
notificationManager.notify(1, notification);
}
Me lo imaginé. Finalmente encontré un proyecto de trabajo bastante bueno para el cual puedes estudiar el código y entenderlo. Me llevó varios días buscar en Google para encontrar algo que no era solo una pieza aquí y una pieza, sino un proyecto completo. Pensé que sería lo suficientemente bueno para publicarlo en caso de que alguien más pudiera usarlo.
Utilice el código siguiente para que funcione correctamente:
@Override
public void onDeletedMessages() {
sendNotification("Message Deleted On server");
super.onDeletedMessages();
}
@Override
public void onMessageReceived(String from, Bundle data) {
sendNotification("Received: " + data.getString("message"));
super.onMessageReceived(from, data);
}
@Override
public void onMessageSent(String msgId) {
sendNotification("Message Sent: " + msgId);
super.onMessageSent(msgId);
}
@Override
public void onSendError(String msgId, String error) {
sendNotification("Message Sent Error: " + msgId + "Error: " + error);
super.onSendError(msgId, error);
}
private void sendNotification(String msg) {
Intent intent = new Intent(this, MessageView.class);
intent.putExtra("Message", msg);
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.logo_y)
.setContentTitle("CCD Message").setContentText(msg)
.setAutoCancel(true).setSound(defaultSoundUri)
.setContentIntent(pendingIntent);
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0, notificationBuilder.build());
}