getIntent() 附加项始终为 NULL [英] getIntent() Extras always NULL

查看:21
本文介绍了getIntent() 附加项始终为 NULL的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我编写了一个简单的 Android 应用程序,显示如下自定义通知:

I wrote a simple Android App that show a custom Notification like this:

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);

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

This piece of code is called ONLY ONCE in my application and it displays a notification with a progress bar (all correctly).

现在,当用户点击此通知时,我的应用程序会处理 onResume 事件.

Now, when a user clicks on this notification my application handles the onResume event.

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

但是 extras 总是 NULL!

but extras is always NULL!

我尝试了以下任何组合:

I've tried any combination of:

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

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

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

but getIntent().getExtras() returns always NULL.

推荐答案

这是场景:
方法 getIntent() 返回第一个意图而不是启动活动.

This is the scenario:
The method getIntent() returns the FIRST intent than launch activity.

因此,当活动关闭(终止)并且用户点击通知时,它将运行活动的新实例并且 getIntent() 按预期工作(Extras 是 不是 null).

So, when the activity is CLOSED (terminated) and the user clicks on the notification, it will run a new instance of the activity and getIntent() works as expected (Extras is not null).

但是如果 Activity 处于睡眠"状态(它在后台)并且用户点击了通知,getIntent() 总是返回启动 Activity 的第一个意图而不是通知意图.

But if the activity is "sleeping" (it is in the background) and the user clicks on the notification, getIntent() always returns the very FIRST intent that started the activity and NOT the notification intent.

所以要在应用程序运行时捕捉通知意图,只需使用这个

So to catch the notification intent while the application is running, simply use this

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

然后覆盖onNewIntent(Intent newintent).

因此,当应用程序首次运行时,可以使用 getIntent(),当应用程序从睡眠状态恢复时,onNewIntent 起作用.

So when an application first runs, getIntent() can be used and when application is resumed from sleeping, onNewIntent works.

这篇关于getIntent() 附加项始终为 NULL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆