2015-05-26 3 views
1

Я хочу открыть конкретную вкладку на основе кода. Он работает, если я делаю это с помощью обычной кнопки.Отправить putExtra через намерение уведомления

Как это работает:

public void toSomewhere (View view) { 
    Intent intent = new Intent(this, SomewhereActivity.class); 
    intent.putExtra("FirstTab", 2); 
    startActivity(intent); 
} 

Intent i = getIntent(); 
int tabToOpen = i.getIntExtra("FirstTab", -1); 
if (tabToOpen!=-1) { 
    // Open the right tab 
} 
else { 
    // Other tab 
} 

Я так хочу, чтобы работать с помощью уведомлений (на данный момент у меня есть этот код, который отправляет уведомление, но не дает .putExtra через):

public static void NotificationIntent(String title, String message) { 
    Intent notificationIntent = new Intent(currentContext, SomewhereActivity.class); 
    **notificationIntent.putExtra("FirstTab", 2);** 
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    PendingIntent intent = PendingIntent.getActivity(currentContext, 0, notificationIntent, 0); 

    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(currentContext) 
      .setContentTitle(title) 
      .setContentIntent(intent) 
      .setContentText(message) 
      .setAutoCancel(true) 
      .setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE | Notification.DEFAULT_LIGHTS); 
    NotificationManager mNotificationManager = (NotificationManager) currentContext.getSystemService(Context.NOTIFICATION_SERVICE); 
    mNotificationManager.notify(0, mBuilder.build()); 
} 

Кто-нибудь знает, как исправить это, поэтому он будет работать и с уведомлением?

+0

поставил дополнительно в ожидании намерения не работает проверьте ответ здесь: http://stackoverflow.com/q/16376643/1168654 –

ответ

2

Используйте FLAG_UPDATE_CURRENT

Из документации:

Флаг, указывающий, что если описанная PendingIntent уже существует, а затем сохранить его, но заменить его дополнительные данные с тем, что в этом новом Намерения. Для использования с getActivity (Context, int, Intent, int), getBroadcast (Context, int, Intent, int) и getService (Context, int, Intent, int).

Это можно использовать, если вы создаете намерения, в которых изменяются только дополнительные параметры, и не волнует, что любые объекты, которые получили ваш предыдущий PendingIntent, смогут запускать его с помощью ваших дополнительных дополнений, даже если они явно не указаны Это.

Код:

Intent notificationIntent = new Intent(getApplicationContext(), viewmessage.class); 
notificationIntent.putExtra("NotificationMessage", notificationMessage); 
notificationIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); 

PendingIntent pendingNotificationIntent = PendingIntent.getActivity(getApplicationContext(),notificationIndex,notificationIntent,PendingIntent.FLAG_UPDATE_CURRENT); 
notification.flags |= Notification.FLAG_AUTO_CANCEL; 
notification.setLatestEventInfo(getApplicationContext(), notificationTitle, notificationMessage, pendingNotificationIntent); 

активность в onNewIntent методы:

@Override 
public void onNewIntent(Intent intent){ 
    Bundle extras = intent.getExtras(); 
    String notificationMessage = extras.getString("NotificationMessage", "UNDEFINED"); 
} 

также вперед вызов в onCreate:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    onNewIntent(getIntent()); 
} 
+0

Спасибо. 'String notificationMessage = extras.getString (" NotificationMessage "," UNDEFINED ");' было ненужным, но остальная часть кода работала идеально! – 0846277

Смежные вопросы