getIntent.remove 额外的不工作
getIntent.remove extra not working
public void showNotification(Context context,String pnrNumber){
Intent intent=new Intent(context,HomeActivity.class);
intent.putExtra("PNR", pnrNumber);
//To Clear the Activity Stack
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
PendingIntent contentIntent = PendingIntent.getActivity(context, uniqueNumber,intent, Intent.FLAG_ACTIVITY_CLEAR_TASK);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context).setSmallIcon(R.drawable.ic_launcher)
.setContentTitle("TravelKhana")
.setContentText("Get food in train for the PNR:" +pnrNumber);
mBuilder.setContentIntent(contentIntent);
mBuilder.setDefaults(Notification.DEFAULT_SOUND);
mBuilder.setAutoCancel(true);
NotificationManager mNotificationManager =
(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(uniqueNumber, mBuilder.build());
uniqueNumber++;
}
并且在 HomeActivity 的 oncreate 中我得到了这个额外的字符串
if(getIntent().hasExtra("PNR")){
mPnrSearch.setTag(getIntent().getStringExtra("PNR"));
onClick(mPnrSearch);
}
然后在 onClick(mPnrSearch);
public void onClick(View v) {
switch (v.getId()) {
case R.id.pnrSearch:
if(NetworkChecker.isConnected(getApplicationContext())) {
easyTracker.send(MapBuilder.createEvent("Home Activity","click", "PNR", null).build());
}
Intent pnrIntent = new Intent(HomeActivity.this, PnrSearch.class);
//If the user came from notification
if(v.getTag() != null){
pnrIntent.putExtra("PNR", v.getTag().toString());
v.setTag(null);
getIntent().removeExtra("PNR");
}
startActivity(pnrIntent);
break;
}
我删除了额外内容,然后我按下后退按钮销毁了应用程序,并通过长按 phone 中的主页按钮重新打开它,然后在额外内容仍然存在并且 onClick(mPnrSearch) 是再次打电话,但我已经删除了多余的为什么会这样??我需要做什么来解决这个问题。
我认为删除后你应该更新新的意图,只需在你的activity
中实现这个功能
protected void onNewIntent(Intent intent) {
// TODO Auto-generated method stub
super.onNewIntent(intent);
setIntent(intent);
}
这是一个 Android 错误或功能,具体取决于您是否希望它发生 ;-) 这种情况没有明确记录,但很明显它的行为方式与您相同描述。
我最近回答了一个类似的问题,并就如何处理这个问题提出了一些建议。有关详细信息,请参阅 my answer。
在我的例子中,我将通知中的值从 onMessageReceived 传递到我的 MainActivity。为什么因为我想通过通知点击特定通知 ID 来计算打开的应用程序,这是我通过 exteras 传递的值(通知打开应用程序 mainactivity )出于分析原因。不管怎样,为了确定 main activity 是否被通知打开,我检查了 exteras 值和 intent 标志。我观察到,当通过通知打开应用程序时,单击意图标志为 0,因此我将以下内容添加到我的 mainactivity.
if(getIntent().getFlags() == 0 && getIntent().getExtras() != null){
Log.i("opened by notification only",getIntent().getStringExtra("myID"));
//rest of process...............
}
public void showNotification(Context context,String pnrNumber){
Intent intent=new Intent(context,HomeActivity.class);
intent.putExtra("PNR", pnrNumber);
//To Clear the Activity Stack
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
PendingIntent contentIntent = PendingIntent.getActivity(context, uniqueNumber,intent, Intent.FLAG_ACTIVITY_CLEAR_TASK);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context).setSmallIcon(R.drawable.ic_launcher)
.setContentTitle("TravelKhana")
.setContentText("Get food in train for the PNR:" +pnrNumber);
mBuilder.setContentIntent(contentIntent);
mBuilder.setDefaults(Notification.DEFAULT_SOUND);
mBuilder.setAutoCancel(true);
NotificationManager mNotificationManager =
(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(uniqueNumber, mBuilder.build());
uniqueNumber++;
}
并且在 HomeActivity 的 oncreate 中我得到了这个额外的字符串
if(getIntent().hasExtra("PNR")){
mPnrSearch.setTag(getIntent().getStringExtra("PNR"));
onClick(mPnrSearch);
}
然后在 onClick(mPnrSearch);
public void onClick(View v) {
switch (v.getId()) {
case R.id.pnrSearch:
if(NetworkChecker.isConnected(getApplicationContext())) {
easyTracker.send(MapBuilder.createEvent("Home Activity","click", "PNR", null).build());
}
Intent pnrIntent = new Intent(HomeActivity.this, PnrSearch.class);
//If the user came from notification
if(v.getTag() != null){
pnrIntent.putExtra("PNR", v.getTag().toString());
v.setTag(null);
getIntent().removeExtra("PNR");
}
startActivity(pnrIntent);
break;
}
我删除了额外内容,然后我按下后退按钮销毁了应用程序,并通过长按 phone 中的主页按钮重新打开它,然后在额外内容仍然存在并且 onClick(mPnrSearch) 是再次打电话,但我已经删除了多余的为什么会这样??我需要做什么来解决这个问题。
我认为删除后你应该更新新的意图,只需在你的activity
中实现这个功能 protected void onNewIntent(Intent intent) {
// TODO Auto-generated method stub
super.onNewIntent(intent);
setIntent(intent);
}
这是一个 Android 错误或功能,具体取决于您是否希望它发生 ;-) 这种情况没有明确记录,但很明显它的行为方式与您相同描述。
我最近回答了一个类似的问题,并就如何处理这个问题提出了一些建议。有关详细信息,请参阅 my answer。
在我的例子中,我将通知中的值从 onMessageReceived 传递到我的 MainActivity。为什么因为我想通过通知点击特定通知 ID 来计算打开的应用程序,这是我通过 exteras 传递的值(通知打开应用程序 mainactivity )出于分析原因。不管怎样,为了确定 main activity 是否被通知打开,我检查了 exteras 值和 intent 标志。我观察到,当通过通知打开应用程序时,单击意图标志为 0,因此我将以下内容添加到我的 mainactivity.
if(getIntent().getFlags() == 0 && getIntent().getExtras() != null){
Log.i("opened by notification only",getIntent().getStringExtra("myID"));
//rest of process...............
}