当读取额外值的活动位于顶部时,通知会传递旧的Intent Extras

时间:2017-02-28 23:49:09

标签: java android notifications

通知给出了旧的价值观。 我读了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并没有创建新的活动,只是将它放到了顶部。

2 个答案:

答案 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();
  1. 编写top getExtraParameterActual();

    的函数

    private void getExtraParameterActual(){            Intent intent = getIntent(); //收回使用// setintenT传递2.1的值     user = getIntent()。getExtras()。getString(USER); //     }

  2. 5。 进入OnCreate()调用e getExtraParameterActual(); 如果需要,可以使用方法重新加载视图,例如reloadMyViews()

    1. 进入onResume()使用pass 5 reloadMyViews()
    2. 的相同功能重新加载你的视图

      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>