2015-02-04 3 views
1

Я создал уведомление и отображаю его правильно, но не могу понять, как передавать данные в действие. Я вытащил одну строку из намерения для отображения в качестве заголовка уведомления, но мне нужно вытащить 2-ю строку и обработать процесс NotificationHandlerActivity.Передача данных с Android-уведомлений

// внутри intentservice

private void sendNotification(Bundle extras) { 
    Intent intent=new Intent(this, NotificationHandlerActivity.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    intent.putExtra("link", extras.getString("link")); 
    mNotificationManager = (NotificationManager)this.getSystemService(Context.NOTIFICATION_SERVICE); 
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, 0); 
    long[] vibrate = {100L, 75L, 50L}; 
    NotificationCompat.Builder mBuilder = 
      new NotificationCompat.Builder(this) 
        .setSmallIcon(R.drawable.abc_ic_menu_copy_mtrl_am_alpha) 
        .setContentTitle(extras.getString("title")) 
        .setOngoing(false) 
        .setAutoCancel(true) 
        .setVibrate(vibrate); 
    mBuilder.setContentIntent(contentIntent); 
    mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build()); 
} 

// Внутри NotificationHandlerActivity

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Bundle b = getIntent().getExtras(); 
} 
+0

см. Мой ответ ниже. он объясняет, что происходит больше, чем два других; Кроме того, я был тем, кто поднял тебя – ChrisMcJava

ответ

0

По-видимому, используя 0 в качестве requestCode при вызове getActivity() на PendingIntent не путь. Я обновил его, чтобы использовать System.currentTimeMillis(), и это, похоже, сработало. Я предполагаю, что в первый раз, когда я создал уведомление, используя 0 в качестве requestCode, дополнительного нет.

0

использовать его как это:

Intent intent=new Intent(this, NotificationHandlerActivity.class); 
intent.putExtra("key", "value"); 

mNotificationManager = (NotificationManager)this.getSystemService(Context.NOTIFICATION_SERVICE); 
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, 0); 
long[] vibrate = {100L, 75L, 50L}; 
NotificationCompat.Builder mBuilder = 
     new NotificationCompat.Builder(this) 
       .setSmallIcon(R.drawable.abc_ic_menu_copy_mtrl_am_alpha) 
       .setContentTitle(extras.getString("title")) 
       .setOngoing(false) 
       .setAutoCancel(true) 
       .setVibrate(vibrate); 
mBuilder.setContentIntent(contentIntent); 
mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build()); 
1

Вы должны использовать дополнительные услуги на вашем Намерения. Поскольку ваши намерения в настоящее время анонимны, вы не можете этого сделать. Экстра - это базовые хранилища ключей. Смотрите ниже:

public static final String KEY_SECOND_STRING = "keySecondString"; 
... 

    ... 
    String secondString = "secondString"; 
    mNotificationManager = (NotificationManager)  
     this.getSystemService(Context.NOTIFICATION_SERVICE); 

    Intent intent = new Intent(this, NotificationHandlerActivity.class); 
    intent.putExtra(KEY_SECOND_STRING, secondString); 
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, 0); 
    ... 

затем, с вашего NotificationHandlerActivity, вы можете получить доступ к этому secondString от намерения.

@Override 
public void onCreate(Bundle sIS){ 
    super.onCreate(); 
    String secondString = getIntent().getStringExtra("keySecondString"); 
    ... 
} 
Смежные вопросы