2013-10-03 17 views
7

Ho fatto un app che gestiscono sms, ho creato le notifiche, ma quando faccio clic su di essi si avvia un'altra attività, vorrei sapere come controllare se un'attività ha stato fermato e riprenderlo.Riprendere un'attività quando si fa clic su una notifica

Ecco il codice utilizzato per creare il pendingintent:

private void createNotification(SmsMessage sms, Context context){ 

    final NotificationManager nm = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); 

    String contentTitle = ""; 


    // construct the Notification object. 
     final NotificationCompat.Builder builder = new NotificationCompat.Builder(context) 
     .setContentTitle(contentTitle) 
     .setContentText(sms.getMessageBody()) 
     .setSmallIcon(R.drawable.ic_launcher) 
     .setLargeIcon(getIconBitmap()) 
     .setNumber(nmessages); 

     builder.setAutoCancel(true); 

     //(R.drawable.stat_sample, tickerText, 
      //  System.currentTimeMillis()); 

     // Set the info for the views that show in the notification panel. 
     //notif.setLatestEventInfo(this, from, message, contentIntent); 
     /* 
     // On tablets, the ticker shows the sender, the first line of the message, 
     // the photo of the person and the app icon. For our sample, we just show 
     // the same icon twice. If there is no sender, just pass an array of 1 Bitmap. 
     notif.tickerTitle = from; 
     notif.tickerSubtitle = message; 
     notif.tickerIcons = new Bitmap[2]; 
     notif.tickerIcons[0] = getIconBitmap();; 
     notif.tickerIcons[1] = getIconBitmap();; 
     */ 

    // Creates an explicit intent for an Activity in your app 
     Intent resultIntent = new Intent(context, BasicActivity.class); 

     resultIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
     // Because clicking the notification opens a new ("special") activity, there's 
     // no need to create an artificial back stack. 
     PendingIntent resultPendingIntent = 
      PendingIntent.getActivity(
      context, 
      0, 
      resultIntent, 
      PendingIntent.FLAG_UPDATE_CURRENT 
     ); 


     // Ritardo in millisecondi 



    builder.setContentIntent(resultPendingIntent); 

    nm.notify(R.drawable.ic_drawer, builder.build()); 
+0

Mostra il codice del vostro intento/PendingIntent. –

+1

Per favore, spiega in modo più dettagliato cosa succede e cosa vuoi che succeda. La tua domanda non è chiara. –

+0

ho risolto con questo: http://stackoverflow.com/questions/3305088/how-to-make-notification-intent-resume-rather-than-making-a-new-intent/39482464#39482464 – TharakaNirmana

risposta

7

È necessario impostare le bandiere nel PendingIntent di ... come FLAG_UPDATE_CURRENT.

Qui è tutto su di esso. http://developer.android.com/reference/android/app/PendingIntent.html

Modifica 1: ho frainteso la domanda.

Qui ci sono collegamenti ad argomenti che hanno avuto lo stesso problema, ma sono risolti:

resuming an activity from a notification

Notification Resume Activity

Intent to resume a previously paused activity (Called from a Notification)

Android: resume app from previous position

Si prega di leggere le risposte di cui sopra per un pieno soluzione e fammi sapere se funziona S.

+0

già fatto, non funziona! – codareee

+0

Aggiornato la risposta – JanBo

2

L'unica soluzione che in realtà ha funzionato per me dopo aver fatto un sacco di ricerca è quello di effettuare le seguenti operazioni:

qui si sta semplicemente lanciando l'applicazione mantenere lo stack corrente:

//here you specify the notification properties 
NotificationCompat.Builder builder = new NotificationCompat.Builder(this).set...(...).set...(..); 

//specifying an action and its category to be triggered once clicked on the notification 
Intent resultIntent = new Intent(this, MainClass.class); 
resultIntent.setAction("android.intent.action.MAIN"); 
resultIntent.addCategory("android.intent.category.LAUNCHER"); 

PendingIntent resultPendingIntent = PendingIntent.getActivity(this, 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

//building the notification 
builder.setContentIntent(resultPendingIntent); 
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
mNotificationManager.notify(0, builder.build()); 
+0

spiegano un po 'di su come funziona il tuo soluzioni e cosa è sbagliato con la metodologia PO. –

2

Prova con Questo.

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
        mContext).setSmallIcon(R.drawable.ic_launcher) 
        .setContentTitle(mContext.getString(R.string.notif_title)) 
        .setContentText(mContext.getString(R.string.notif_msg)); 
      mBuilder.setAutoCancel(true); 

     // Set notification sound 
     Uri alarmSound = RingtoneManager 
       .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     mBuilder.setSound(alarmSound); 

     Intent resultIntent = mActivity.getIntent(); 
     resultIntent.addCategory(Intent.CATEGORY_LAUNCHER); 
     resultIntent.setAction(Intent.ACTION_MAIN); 

     PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
     mBuilder.setContentIntent(pendingIntent); 
     NotificationManager mNotificationManager = (NotificationManager) mContext 
       .getSystemService(Context.NOTIFICATION_SERVICE); 
     // mId allows you to update the notification later on. 
     mNotificationManager.notify(mId, mBuilder.build()); 
+0

Questo è anche funzionano bene Intent resultIntent = new Intent (mContext, ActivityWebView.class); resultIntent.setFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); – Thushara

0

Aggiungi questa riga all'attività corrispondente nel file manifest della tua app.

android: launchMode = "singleTask"

esempio:

<activity 
android:name=".Main_Activity" 
android:label="@string/title_main_activity" 
android:theme="@style/AppTheme.NoActionBar" 
android:launchMode="singleTask" /> 
Problemi correlati