tipos studio servicios segundo programacion plano notificaciones intent example ejemplo android service notifications

studio - Enviar una notificación de un servicio en Android



notificaciones en segundo plano android studio (5)

Tengo un servicio en ejecución y me gustaría enviar una notificación. Lástima, el objeto de notificación requiere un Context , como una Activity , y no un Service .

¿Conoces alguna forma de pasar eso? Traté de crear una Activity para cada notificación, pero parece feo y no puedo encontrar una forma de iniciar una Activity sin ninguna View .


Bueno, no estoy seguro de si mi solución es la mejor práctica. Usando NotificationBuilder mi código es así:

private void showNotification() { Intent notificationIntent = new Intent(this, MainActivity.class); PendingIntent contentIntent = PendingIntent.getActivity( this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); builder.setContentIntent(contentIntent); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(NOTIFICATION_ID, builder.build()); }

Manifiesto:

<activity android:name=".MainActivity" android:launchMode="singleInstance" </activity>

y aquí el Servicio:

<service android:name=".services.ProtectionService" android:launchMode="singleTask"> </service>

No sé si realmente hay un servicio singleTask en el Service pero esto funciona correctamente en mi aplicación ...


Este tipo de notificación está en desuso como se ve en los documentos:

@java.lang.Deprecated public Notification(int icon, java.lang.CharSequence tickerText, long when) { /* compiled code */ } public Notification(android.os.Parcel parcel) { /* compiled code */ } @java.lang.Deprecated public void setLatestEventInfo(android.content.Context context, java.lang.CharSequence contentTitle, java.lang.CharSequence contentText, android.app.PendingIntent contentIntent) { /* compiled code */ }

Mejor manera
Puede enviar una notificación como esta:

// prepare intent which is triggered if the // notification is selected Intent intent = new Intent(this, NotificationReceiver.class); PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, 0); // build notification // the addAction re-use the same intent to keep the example short Notification n = new Notification.Builder(this) .setContentTitle("New mail from " + "[email protected]") .setContentText("Subject") .setSmallIcon(R.drawable.icon) .setContentIntent(pIntent) .setAutoCancel(true) .addAction(R.drawable.icon, "Call", pIntent) .addAction(R.drawable.icon, "More", pIntent) .addAction(R.drawable.icon, "And more", pIntent).build(); NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); notificationManager.notify(0, n);

Mejor manera
El código anterior necesita un nivel API mínimo de 11 (Android 3.0).
Si su nivel mínimo de API es menor que 11, debe usar la clase NotificationCompat de la biblioteca de soporte de esta manera.

Entonces, si su nivel de API objetivo mínimo es 4+ (Android 1.6+), use esto:

import android.support.v4.app.NotificationCompat; ------------- NotificationCompat.Builder builder = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.mylogo) .setContentTitle("My Notification Title") .setContentText("Something interesting happened"); int NOTIFICATION_ID = 12345; Intent targetIntent = new Intent(this, MyFavoriteActivity.class); PendingIntent contentIntent = PendingIntent.getActivity(this, 0, targetIntent, PendingIntent.FLAG_UPDATE_CURRENT); builder.setContentIntent(contentIntent); NotificationManager nManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); nManager.notify(NOTIFICATION_ID, builder.build());


Si ninguno de estos funciona, intente getBaseContext() , en lugar de context o this .


Tanto la Activity como el Service realidad extend Context para que simplemente pueda usar this como su Context dentro de su Service .

NotificationManager notificationManager = (NotificationManager) getSystemService(Service.NOTIFICATION_SERVICE); Notification notification = new Notification(/* your notification */); PendingIntent pendingIntent = /* your intent */; notification.setLatestEventInfo(this, /* your content */, pendingIntent); notificationManager.notify(/* id */, notification);


@TargetApi(Build.VERSION_CODES.JELLY_BEAN) public void PushNotification() { NotificationManager nm = (NotificationManager)context.getSystemService(NOTIFICATION_SERVICE); Notification.Builder builder = new Notification.Builder(context); Intent notificationIntent = new Intent(context, MainActivity.class); PendingIntent contentIntent = PendingIntent.getActivity(context,0,notificationIntent,0); //set builder.setContentIntent(contentIntent); builder.setSmallIcon(R.drawable.cal_icon); builder.setContentText("Contents"); builder.setContentTitle("title"); builder.setAutoCancel(true); builder.setDefaults(Notification.DEFAULT_ALL); Notification notification = builder.build(); nm.notify((int)System.currentTimeMillis(),notification); }