notifications créer - Envoyer une notification d'un service dans Android




studio simple (5)

@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);
}

J'ai un service en cours d'exécution, et je voudrais envoyer une notification. Dommage, l'objet de notification nécessite un Context , comme une Activity , et non un Service .

Connaissez-vous un moyen de contourner cela? J'ai essayé de créer une Activity pour chaque notification mais elle semble moche, et je ne peux pas trouver un moyen de lancer une Activity sans aucune View .


Eh bien, je ne suis pas sûr si ma solution est la meilleure pratique. En utilisant le NotificationBuilder mon code ressemble à ceci:

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());
    }

Manifeste:

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

et voici le service:

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

Je ne sais pas s'il y a vraiment une singleTask au Service mais cela fonctionne correctement à mon application ...


L' Activity et le Service extend Context manière à ce que vous puissiez simplement l'utiliser comme Context dans votre 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);

Si aucune de ces getBaseContext() fonctionne, essayez getBaseContext() , au lieu de context ou this .


Après avoir fait une recherche, j'ai obtenu la solution du guide de développement android

PendingIntent contentIntent ;
Intent intent = new Intent(this,TestActivity.class);
intent.putExtra("extra","Test");
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);

stackBuilder.addParentStack(ArticleDetailedActivity.class);

contentIntent = stackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT);

Pour obtenir une valeur supplémentaire Intent dans la classe Test Activity, vous devez écrire le code suivant:

 Intent intent = getIntent();
 String extra = intent.getStringExtra("extra") ;




android service notifications