通知给出了旧的价值观。 我读了stackoverflow链接,但仍然不适合我: Notification passes old Intent Extras
我有活动A. 当我在活动B上并触摸通知时,Extra参数被正确地给出并显示活动A,其中正确的值用getExtras(..)读取;
然后活动A仍位于顶部 - 显示在屏幕上: 我使用putExtras(newValue)的新值点击第二次通知,以创建新活动A,但使用新值。
问题: intent.getExtras()`正在读取第一个通知的旧值,而不是第二个通知给出的新值。
我在Pending Intent的Flags和顶部的链接组合上做了很多组合,但是aplication仍然采用第二个Notification的旧值(第一个触摸通知的值)。我尝试了标志: PendingIntent.FLAG_UPDATE_CURRENT 来更新值,而不是创建一个新的Activity和其他一些标志。
当活动A仍显示在屏幕上时,如何让第二个通知为活动A提供正确的值?
创建通知的代码片段。
public void notificationCreateGu(String newMessageUserUidOfSender) {
Intent it = new Intent(this,ActivityA.class);
it.putExtra(USER_UID_READER,newMessageUserUidOfSender);
StoreValuesClass.count=StoreValuesClass.count+2;
PendingIntent pi = PendingIntent.getActivity(this, StoreValuesClass.count,it, 0);
Notification notification = new NotificationCompat.Builder(this)
.setTicker(newMessageUserUidOfSender )
.setSmallIcon(android.R.mipmap.sym_def_app_icon)
.setContentTitle("Title Message ")
.setContentText(String.valueOf(newMessageUserUidOfSender))
.setContentIntent(pi)
.setAutoCancel(true)
.build();
int m;
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
m= StoreValuesClass.count=StoreValuesClass.count+2;
notificationManager.notify((m), notification);
}
// StoreValueClass.count是一个静态值,活动可以读取该值以为通知提供唯一ID。
读取值的代码片段。
userUidReader = getIntent().getExtras().getString(USER_UID_READER)
我尝试将值重新加载到onResume()但是重新加载到onResume()中仍然采用第一次读取getExtras()的旧值。 据我所知,操作系统Android并没有创建新的活动,只是将它放到了顶部。
答案 0 :(得分:1)
使用CommonsWare的答案,帮助重写onNewIntetn和链接: http://www.helloandroid.com/tutorials/communicating-between-running-activities
1进入xmlFile:放入android:launchMode =“singleTask” 对于活动,将使用getExtras接收额外的参数。
<activity android:name=".ActivityWillReceiveWithGetExtras"
android:launchMode="singleTask"
android:taskAffinity=""
android:excludeFromRecents="true">
</activity>
2.对于将通过get_extras(...)接收值的活动覆盖名为onNewIntent的方法:
2.1观察:放线:
setIntent(intent);
设置意图的标识符。
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);//must store the new intent unless getIntent() will return the old one
getExtraParameterActual();
}
2.2将Extra参数放入命令getExtras(...
getExtraParameterActual();
编写top getExtraParameterActual();
的函数private void getExtraParameterActual(){ Intent intent = getIntent(); //收回使用// setintenT传递2.1的值 user = getIntent()。getExtras()。getString(USER); // }
5。 进入OnCreate()调用e getExtraParameterActual(); 如果需要,可以使用方法重新加载视图,例如reloadMyViews()
7我使用的通知代码注意FLAGS
public void notificationCreateGu(String User) {
Log.d(TAG,nameOfTheService+"BUG createnotification for received CHAT messages useruidOfTheFriendNear="+newMessageUserUidOfSender);
Intent it = new Intent(this,ActivityWillReceiveWithGetExtras.class);
it.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
it.putExtra(USER,user);
StoreValuesClass.count=StoreValuesClass.count+2;
PendingIntent pi = PendingIntent.getActivity(this, StoreValuesClass.count,it, PendingIntent.FLAG_UPDATE_CURRENT);
Notification notification = new NotificationCompat.Builder(this)
.setTicker(newMessageUserUidOfSender )
.setSmallIcon(android.R.mipmap.sym_def_app_icon)
.setContentTitle("Title Message ")
.setContentText(String.valueOf(newMessageUserUidOfSender))
.setContentIntent(pi)
.setAutoCancel(true)
.build();
int m;
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
m= StoreValuesClass.count=StoreValuesClass.count+2;
notificationManager.notify((m), notification);
}
答案 1 :(得分:0)
在您的活动中覆盖onNewIntent()
。
getIntent()
会返回用于最初创建活动的Intent
。如果通过startActivity()
来电将现有活动实例恢复到前台,则会调用onNewIntent()
向您提供用于最近Intent
次呼叫的startActivity()
。< / p>