getIntent()其他总是NULL

我写了一个简单的Android应用程序,显示一个自定义通知像这样:

Context context = getApplicationContext(); NotificationManager manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); Notification notification = new Notification( R.drawable.icon, title, System.currentTimeMillis()); Intent notificationIntent = new Intent( context, this.getClass()); notificationIntent.putExtra("com.mysecure.lastpage", "SECURECODE"); PendingIntent pendingIntent = PendingIntent.getActivity( context , 0, notificationIntent, 0); notification.flags = notification.flags | Notification.FLAG_ONGOING_EVENT; notification.contentView = new RemoteViews(context.getPackageName(), R.layout.notifypbar); notification.contentIntent = pendingIntent; notification.contentView.setTextViewText(R.id.notifypb_status_text, text); notification.contentView.setProgressBar(R.id.notifypb_status_progress, 100, (int)(100*progress), false); manager.notify(104, notification); 

这段代码在我的应用程序中只被调用一次,并显示一个通知,并带有进度条(全部正确)。

现在,当用户点击这个通知我的应用程序处理onResume事件。

 public void onResume() { super.onResume(); // TODO: Extras è SEMPRE NULL!!! impossibile! Intent callingintent = getIntent(); Bundle extras = callingintent.getExtras(); 

但临时演员总是空的!

我已经尝试过任何组合:

 notificationIntent.putExtra("com.mysecure.lastpage", "SECURECODE"); 

要么

 Bundle extra = new Bundle(); extra.putString(key, value); notificationIntent.putExtra(extra); 

但是getIntent()。getExtras()总是返回NULL。

这是场景:
方法getIntent()返回FIRST的意图,而不是启动活动。

所以,当活动CLOSED(终止),用户点击通知,它将运行一个新的活动实例和getIntent()按预期工作(其他不为 null )。

但是,如果活动处于“hibernate”状态(在后台),并且用户单击通知,则getIntent()始终返回启动活动的第一个意图,而不是通知意图。

因此,为了在应用程序运行时捕获通知意图,只需使用这个

notificationIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);

然后重写onNewIntent(Intent newintent)

所以当一个应用程序第一次运行时,可以使用getIntent() ,当应用程序从hibernate状态恢复时, onNewIntent起作用。

只需在Resume()方法的顶部写上这段代码即可。 这是所需要的。 这刷新意图 – 我不知道,但它的作品。

 @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); } 

问题:您正在为您的紧急集中发送相同的请求代码。 改变这一点。

解决scheme :设置全局variablesint UNIQUE_INT_PER_CALL = 0,当你创build像下面的pendingIntent调用。

  PendingIntent contentIntent = PendingIntent.getActivity(context, UNIQUE_INT_PER_CALL, notificationIntent, 0); 

UNIQUE_INT_PER_CALL ++; //增加。

由于看起来你的活动已经在运行,我想你需要指定FLAG_UPDATE_CURRENT ,否则getIntent()调用将返回前一个。 看到这个答案 。

查看共享首选项以传递和检索持久性键/值对。