Ce code crée une notification. Si vous cliquez dessus, l'application en cours est exécutée (l'intention est créée dans Entry
, qui est mon seul Activity
), version légèrement modifiée d'un blog Android Developers:
private void makeIntent() {
NotificationManager mgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification note = new Notification(R.drawable.prev, "Status message!", System.currentTimeMillis());
Intent intent = new Intent(this, Entry.class);
PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0);
note.setLatestEventInfo(this, "New Email", "Unread Conversation", pi);
note.flags |= Notification.FLAG_AUTO_CANCEL;
mgr.notify(NOTIFY_ME_ID, note);
}
Mais je ne veux pas démarrer d'activité, mais simplement exécuter une méthode dans l'activité en cours. D'après ce que j'ai lu jusqu'à présent, je suppose que je dois utiliser des méthodes telles que startActivityForResult()
, utiliser intent-filters
et implémenter onActivityResult()
, mais après avoir bousculé tout cela, modifié les éléments dans Intent
et PendingIntent
, je n'ai toujours aucun résultat utilisable. Est-il possible d'appeler simplement une méthode dans Entry
(mon Activity
principal, dans lequel le Intent
est créé), ou d'attraper un Intents
sortant ou entrant lorsque je clique sur mon Notification
nouvellement créé?
PS Toutes mes excuses s'il s'agit d'un fil en double, SO est assez lent en ce moment, je ne peux pas effectuer de recherche correctement.
Ajoutez Android:launchMode="singleTop"
dans votre activity
dans votre fichier manifeste, utilisez la méthode protected void onNewIntent(Intent intent) { ... }
et utilisez le code suivant:
private static final int MY_NOTIFICATION_ID = 1;
private NotificationManager notificationManager;
private Notification myNotification;
void notification() {
notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
myNotification = new Notification(R.drawable.next, "Notification!", System.currentTimeMillis());
Context context = getApplicationContext();
String notificationTitle = "Exercise of Notification!";
String notificationText = "http://Android-er.blogspot.com/";
Intent myIntent = new Intent(this, YourActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(YourActivity.this, 0, myIntent, Intent.FILL_IN_ACTION);
myNotification.flags |= Notification.FLAG_AUTO_CANCEL;
myNotification.setLatestEventInfo(context, notificationTitle, notificationText, pendingIntent);
notificationManager.notify(MY_NOTIFICATION_ID, myNotification);
}
Cela a fonctionné à 100% pour moi:
Placez ce code dans une méthode:
Intent intent = new Intent(this, YourClass.class);
intent.putExtra("NotiClick",true);
PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
if (Android.os.Build.VERSION.SDK_INT >= Android.os.Build.VERSION_CODES.JELLY_BEAN) {
Notification Noti;
Noti = new Notification.Builder(this)
.setContentTitle("YourTitle")
.setContentText("YourDescription")
.setSmallIcon(R.mipmap.ic_launcher)
.setContentIntent(pIntent)
.setAutoCancel(true).build();
NotificationManager notificationManager =
(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
notificationManager.notify(0, Noti);
}
Dans le constructeur onCreate/de votre classe, procédez comme suit:
if (savedInstanceState == null) {
Bundle extras = getIntent().getExtras();
if(extras == null)
{
//Cry about not being clicked on
}
else if (extras.getBoolean("NotiClick"))
{
//Do your stuff here mate :)
}
}
Intent intent = new Intent(this, Notificationintent.class);
PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, 0);
Notification noti = new Notification.Builder(this)
.setContentTitle("APP NOTIFICATION")
.setContentText(messageValue)
.setSmallIcon(R.drawable.ic_launcher)
.setStyle(new Notification.BigTextStyle()
.bigText(messageValue))
.setContentIntent(pIntent).build();
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
// hide the notification after its selected
noti.flags |= Notification.FLAG_AUTO_CANCEL;
notificationManager.notify(0, noti);