Java Android AlarmManager唤醒具有不同意图的应用程序
我们的应用程序使用AlarmManager以某种挂起内容唤醒应用程序,此意图始终正确地传递给onReceive方法。在以下代码中,alarmid和alarmuser具有正确的信息:Java Android AlarmManager唤醒具有不同意图的应用程序,java,android,android-intent,alarmmanager,Java,Android,Android Intent,Alarmmanager,我们的应用程序使用AlarmManager以某种挂起内容唤醒应用程序,此意图始终正确地传递给onReceive方法。在以下代码中,alarmid和alarmuser具有正确的信息: @Override public void onReceive(Context ctx, Intent intent) { Intent i = new Intent(context, MainActivity.class); i.putExtra("alarmid", intent.getIntEx
@Override
public void onReceive(Context ctx, Intent intent) {
Intent i = new Intent(context, MainActivity.class);
i.putExtra("alarmid", intent.getIntExtra("id", -1));
i.putExtra("alarmuser", intent.getStringExtra("user"));
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
但是当出于此目的调用startActivity时,只有在调用onCreate方法时才会提供额外的数据。因此,这段代码运行良好,变量设置如下:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(getIntent().hasExtra("alarmid") && getIntent().hasExtra("alarmuser")) {
String alarmId = getIntent().getExtras().getString("alarmid");
String alarmUser = getIntent().getExtras().getString("alarmuser");
}
}
然而,如果使用onRestart,我们会得到一个空的意图(没有额外的)。也就是说,此代码不起作用,并且永远不会设置变量:
@Override
public void onRestart() {
super.onRestart();
if(getIntent().hasExtra("alarmid") && getIntent().hasExtra("alarmuser")) {
String alarmId = getIntent().getExtras().getString("alarmid");
String alarmUser = getIntent().getExtras().getString("alarmuser");
}
}
因此,onStart(显然是在onCreate和onRestart之后调用)有时有我们的额外功能,有时没有
我们是做错了还是应该这样做?i.setFlags(Intent.FLAG\u ACTIVITY\u NEW\u TASK)代码>这一行可能是您的问题。请尝试将其删除,然后重试。如果没有帮助,尝试将变量传递给静态变量,这样就不会丢失它们。