15

Questo codice crea una notifica. Se si fa clic su di esso, l'applicazione corrente è stato eseguito (l'intento è stato creato in Entry, che è il mio unico Activity), una versione leggermente modificata di un blog Android Developers:Metodo di chiamata Android alla notifica, fare clic su

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

Ma io non voglio iniziare qualsiasi attività, ma semplicemente per eseguire un metodo nell'attività corrente. Da quanto ho letto fino ad ora, suppongo di dover utilizzare metodi come startActivityForResult(), utilizzare intent-filters e implementare onActivityResult(), ma dopo aver fatto tutto ciò che è accaduto, cambiando le cose nello Intent e nello PendingIntent, non ho ancora risultati utilizzabili. È possibile in qualche modo chiamare semplicemente un metodo in Entry (il mio principale Activity, in cui è stato creato il Intent), o prendere qualsiasi Intents in uscita o in entrata quando faccio clic sul mio nuovo fatto Notification?

PS. mi scuso se questo è un thread duplicato, SO è abbastanza lento in questo momento, non posso cercare correttamente.

risposta

13

Aggiungere android:launchMode="singleTop" nel vostro activity nel file manifest, hanno il metodo protected void onNewIntent(Intent intent) { ... } Utilizzando questo codice:

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

Funziona, grazie. – stealthjong

+1

La migliore soluzione che Google mi ha dato, grazie. –

+0

Come già detto non dimenticare di aggiungere 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

qui Notificationintent è un'altra attività, e messagevalue è una stringa. –

4

questo ha funzionato al 100% per me:

Inserire questo codice in un metodo :

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

Quindi nel onCreate/co nstructor della tua classe fai questo:

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

    }