У меня есть широковещательный приемник, который при получении чего-либо создает ожидающее намерение, упаковывает его в некоторые данные и использует его для создания уведомления с NotificationManager.Действие, указанное в ожидающем намерении, когда NotificationManager возобновляет действие, всегда считывает данные исходного ожидающего намерения - оно никогда не считывает какие-либо новые данные, если они установлены последующими onReceive () из приемника вещания.Вот фрагмент от приемника вещания:
public void onReceive( Context context, Intent intent ) {
String action = intent.getAction();
if( action.equals( "someaction" ) ) {
long now = System.currentTimeMillis();
int icon = R.drawable.icon;
CharSequence tickerText = context.getString( R.string.tickerText );
CharSequence contentTitle = context.getString( R.string.contentTitle );
CharSequence contentText = context.getString( R.string.contentText );
Intent notificationIntent = new Intent( context, MyActivity.class );
Log.d( TAG, "Creating notification with data = " + intent.getStringExtra( "somestring" ) );
notificationIntent.putExtra( "somestring", intent.getStringExtra( "somestring" ) );
notificationIntent.addFlags( Intent.FLAG_ACTIVITY_SINGLE_TOP );
notificationIntent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK );
PendingIntent contentIntent = PendingIntent.getActivity( context, 0, notificationIntent, 0 );
Notification notification = new Notification( icon, tickerText, now );
NotificationManager notificationmgr = (NotificationManager)context.getSystemService( Context.NOTIFICATION_SERVICE );
notification.flags |= Notification.FLAG_AUTO_CANCEL |
Notification.DEFAULT_SOUND |
Notification.DEFAULT_VIBRATE;
notification.setLatestEventInfo( context, contentTitle, contentText, contentIntent );
notificationmgr.cancelAll();
notificationmgr.notify( 0, notification );
}
}
, а вот пример действия:
protected void onStart() {
super.onStart();
Intent intent = getIntent();
String somestring = intent.getStringExtra( "somestring" );
Log.d( TAG, "onStart(), somestring = " + somestring );
}
protected void onResume() {
super.onResume();
Intent intent = getIntent();
String somestring = intent.getStringExtra( "somestring" );
Log.d( TAG, "onResume(), somestring = " + somestring );
}
protected void onNewIntent( Intent intent ) {
Log.d( TAG, "onNewIntent(), intent = " + intent );
super.onNewIntent( intent );
setIntent( intent );
}
Итак, вот сценарий: С главного экрана мой приемник получает некоторое намерение,скажем, somestring установлено в "привет мир".Панель уведомлений показывает уведомление, я сдвигаю панель уведомлений и нажимаю на уведомление, чтобы запустить (создать или возобновить) действие.Упражнение правильно читает «привет мир».Я оставляю активность на переднем плане или фон с помощью клавиши home.Во второй раз мой приемник вещания получает, скажем, «снова привет» как somestring .Он снова создает уведомление, на этот раз с «hello again», за исключением того, что при возобновлении активности через уведомление я вижу в отладке, что , ни getIntent (), ни onNewIntent () не отражает обновленное значение somestring (то есть "снова привет").То есть, он все еще держится за старую ценность "привет мира".
Есть идеи?Я не могу найти способ принудительно обновить данные намерения.Любая помощь приветствуется;заранее спасибо.