web-dev-qa-db-de.com

Android-Anrufmethode beim Benachrichtigungsklick

Dieser Code erstellt eine Benachrichtigung. Wenn Sie darauf klicken, wird die aktuelle Anwendung ausgeführt (die Absicht wird in Entryname__, das ist mein einziger Activityname__, erstellt), einer leicht modifizierten Version eines Android Developers Blogs:

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

Ich möchte jedoch keine Aktivität starten, sondern lediglich eine Methode in der aktuellen Aktivität ausführen. Nach allem, was ich bisher gelesen habe, muss ich Methoden wie startActivityForResult() verwenden, intent-filters verwenden und onActivityResult() implementieren, aber nachdem ich mit all diesen Dingen herumgespielt habe und Dinge in Intentund PendingIntentgeändert habe, habe ich immer noch kein verwertbares Ergebnis. Ist es möglich, irgendwie eine Methode in Entryaufzurufen (mein HauptActivityname__, in der der Intenterstellt wird) oder abgehende oder eingehende Intentsabzufangen, wenn ich auf meinen neu erstellten Notificationklicke?

PS. Ich entschuldige mich, wenn dies ein doppelter Thread ist, SO ist im Moment ziemlich langsam, ich kann nicht richtig suchen.

17
stealthjong

Fügen Sie Android:launchMode="singleTop" in Ihre activity in Ihrer Manifestdatei ein, verwenden Sie die Methode protected void onNewIntent(Intent intent) { ... } und verwenden Sie diesen Code:

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);
}
13
MC Emperor

Das hat zu 100% für mich funktioniert:

Fügen Sie diesen Code in eine Methode ein:

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

Führen Sie dann im onCreate/Konstruktor Ihrer Klasse Folgendes aus:

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 :)
        }

    }
4
    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);
0
Vipin Yadav