如何解决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,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);
在我的应用程序中,这段代码仅被称为ONCE ONCE,它显示带有进度条的通知(全部正确)。
现在,当用户单击此通知时,我的应用程序将处理“ 1”事件。
public void onResume()
{
super.onResume();
// TODO: Extras è SEMPRE NULL!!! impossibile!
Intent callingintent = getIntent();
Bundle extras = callingintent.getExtras();
但Extras始终为NULL!
我尝试过以下任意组合:
notificationIntent.putExtra(\"com.mysecure.lastpage\",\"SECURECODE\");
要么
Bundle extra = new Bundle();
extra.putString(key,value);
notificationIntent.putExtra(extra);
但是getIntent()。getExtras()始终返回NULL。
解决方法
这是方案:
方法“ 5”返回比启动活动更高的意图。
因此,当活动已关闭(终止)并且用户单击通知时,它将运行该活动的新实例,并且
getIntent()
按预期工作(附加值不是null
)。
但是,如果活动是“正在睡眠”(它在后台)并且用户单击通知,则getIntent()
总是返回启动该活动的最初意图,而不是返回通知意图。
因此,要在应用程序运行时捕获通知意图,只需使用此方法
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
然后覆盖onNewIntent(Intent newintent)
。
因此,当一个应用程序首次运行时,可以使用getIntent()
,而当应用程序从睡眠状态恢复时,可以使用onNewIntent
。
, 只需将此代码写在Resume()方法之上的上方即可。这就是全部。这刷新了意图-我不是很清楚,但是可以。
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
}
, 问题:您正在为未决强度发送相同的请求代码。改变这个。
解决方案:设置全局变量int UNIQUE_INT_PER_CALL = 0并在创建如下所示的未决调用时进行设置。
PendingIntent contentIntent = PendingIntent.getActivity(context,UNIQUE_INT_PER_CALL,notificationIntent,0);
UNIQUE_INT_PER_CALL++; // to increment.
, 由于您的活动似乎已经开始,因此我认为您需要指定FLAG_UPDATE_CURRENT
,否则getIntent()
调用将返回上一个。看到这个答案。
, 查看共享首选项,以传递和检索持久键/值对。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。