活动开始时缺少意图附加功能

jim*_*jim 8 android android-intent

在广播接收器中,我想启动我的应用程序(Activity)并传入一些数据.

我的问题是额外的东西似乎没有延续到活动中.我试图获取onNewIntent(Intent i)函数内的数据.

有任何想法吗?

这是我目前在BroadcastReceiver中的尝试:

Intent intSlider = new Intent();
intSlider.setClass(UAirship.shared().getApplicationContext(), SliderMenuActivity.class);
intSlider.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

intSlider.putExtra("action", ScreensEnum.Object);
intSlider.putExtra("objectId", objectId);
intSlider.putExtra("objectCode", objectCode);
intSlider.putExtra("userId", userId);

UAirship.shared().getApplicationContext().startActivity(intSlider);
Run Code Online (Sandbox Code Playgroud)

编辑 - 添加了onNewIntent()和onCreate()中使用的代码

onCreate()当应用程序当前未运行时,以下代码非常有用.当应用程序已经运行时,相同的代码不起作用(即没有额外的onNewIntent()功能).

Intent intent = getIntent();

if(intent.hasExtra("objectId")) {

    loadDetail(intent.getStringExtra("objectId"), "2w232");
}
Run Code Online (Sandbox Code Playgroud)

Vla*_*nov 9

问题是getIntent()方法.它始终返回启动活动的意图,而不是最近的活动.您应该使用传递给onNewIntent方法的intent 作为参数.


Ahm*_*xan 1

从文档中摘录

如果活动在其包中将 launchMode 设置为“singleTop”,或者客户端在调用 startActivity(Intent) 时使用 FLAG_ACTIVITY_SINGLE_TOP 标志,则会调用此方法。在任何一种情况下,当活动在活动堆栈顶部重新启动而不是启动活动的新实例时,将使用用于重新启动的 Intent 在现有实例上调用 onNewIntent()它。

活动在收到新意图之前始终会暂停,因此您可以在此方法之后调用 onResume()。

请注意,getIntent() 仍然返回原始 Intent。您可以使用 setIntent(Intent) 将其更新为这个新的 Intent。

我认为最后一段解释了你的问题。