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()
调用将返回前一个。 看到这个答案 。
查看共享首选项以传递和检索持久性键/值对。