2013-10-03 11 views
7

Ich habe eine App erstellt, die SMS verwaltet, ich habe die Benachrichtigungen erstellt, aber wenn ich auf sie klicke, wird eine andere Aktivität gestartet. Ich möchte wissen, wie eine Aktivität überprüft wird wurde gestoppt und es wieder aufnehmen.Eine Aktivität fortsetzen, wenn auf eine Benachrichtigung geklickt wird

Hier ist der Code verwendet, um die PendingIntent zu erstellen:

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

Zeigen Sie den Code Ihrer Intent/PendingIntent. –

+1

Bitte erläutern Sie genauer, was passiert und was Sie stattdessen tun möchten. Deine Frage ist nicht klar. –

+0

Ich löste es damit: http://stackoverflow.com/questions/3305088/how-to-make-notification-int-resume-rather-than-making-a-new-intent/39482464#39482464 – TharakaNirmana

Antwort

7

Sie benötigen Fahnen in Ihrer PendingIntent des ... wie FLAG_UPDATE_CURRENT einzustellen.

Hier ist alles dran. http://developer.android.com/reference/android/app/PendingIntent.html

Edit 1: Ich habe die Frage missverstanden.

Hier sind Links zu Themen, die das gleiche Problem hatte, aber aufgelöst:

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

Bitte beachten Sie die oben genannten Antworten für eine volle lesen Lösung und lassen Sie mich wissen, ob es funktioniert s.

+0

bereits getan, es funktioniert nicht! – codareee

+0

Aktualisiert die Antwort – JanBo

2

Die einzige Lösung, die tatsächlich für mich gearbeitet, nachdem eine Menge Suche machen, ist folgendes zu tun:

hier sind Sie einfach der Anwendung startet den aktuellen Stack halten:

//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

erklären Sie ein wenig darüber, wie Ihre Lösungen funktioniert und was ist falsch mit OP-Methodik. –

2

Versuchen mit Dies.

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

Dies funktioniert auch gut Intent resultIntent = neue Absicht (mContext, ActivityWebView.class); resultIntent.setFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); – Thushara

0

Fügen Sie diese Zeile zu der entsprechenden Aktivität in der Manifestdatei Ihrer App hinzu.

android: launchMode = "singleTask"

zB:

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