15

Ten kod tworzy powiadomienie. Jeśli klikniesz go, obecna aplikacja jest prowadzony (intencją jest tworzony w Entry, który jest moim jedynym Activity), lekko zmodyfikowana wersja Android Developers blogu:Metoda połączenia z Androidem po powiadomieniu kliknij

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

Ale nie chcę, aby rozpocząć dowolne działanie, a jedynie uruchomienie metody w bieżącym działaniu. Z tego co przeczytałem do tej pory, myślę, że muszę użyć metod takich jak startActivityForResult(), użyć intent-filters i zaimplementować onActivityResult(), ale po tym, jak się z tym wszystkim pogubiłem, zmieniając rzeczy w Intent i PendingIntent, nadal nie mam żadnego użytecznego wyniku. Czy można w jakiś sposób wywołać metodę w Entry (moja główna Activity, w której jest tworzona Intent) lub przechwycić każdą wychodzącą lub przychodzącą Intents po kliknięciu na nowo utworzoną Notification?

PS. moje przeprosiny, jeśli jest to duplikat wątku, SO jest teraz dość powolny, nie mogę poprawnie wyszukiwać.

Odpowiedz

13

Dodaj android:launchMode="singleTop" w swojej activity w pliku manifestu, mają metodę protected void onNewIntent(Intent intent) { ... } i użyć tego kodu:

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

Działa, dziękuję. – stealthjong

+1

Najlepsze rozwiązanie, które otrzymałem od Google, dzięki. –

+0

Jak wspomniano, nie zapomnij dodać android: launchMode = "singleTop" –

0
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

tutaj Notificationintent to kolejna aktywność, a messagevalue to ciąg znaków. –

4

To działało 100% dla mnie:

Umieść ten kod w metodzie :

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

Następnie w onCreate/co nstruktor Twojej klasy:

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

    }