我有一个闹钟应用,即使用闹钟管理器和广播接收器。 该应用程序是一个单独的活动和4个片段。当警报响起时,onReceive方法向主活动发送意图,主活动在onNewIntent方法中接收此意图,然后移动到正确的片段。一切正常,除非应用程序关闭后报警响起。
一旦我销毁应用程序,警报仍会消失,广播接收器的意图将触发,但onNewIntent方法确实捕获了意图并将应用程序移动到正确的片段。
这是广播接收器类中移动到主要活动的意图
Intent alarmIntent = new Intent( context, ClockActivity.class );
alarmIntent.addFlags(Intent.FLAG_FROM_BACKGROUND);
alarmIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
alarmIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
alarmIntent.putExtra("Alarm Name", receivedAlarm.getmName());
context.startActivity(alarmIntent);
这是我的主要活动中的onNewIntent方法,当应用程序关闭时调用闹钟时不会调用该方法。
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
PhraseFragment phraseFragment = new PhraseFragment();
String activeName = intent.getStringExtra("Alarm Name");
Bundle args = new Bundle();
args.putString("activeName", activeName);
phraseFragment.setArguments(args);
getFragmentManager().beginTransaction()
.replace(R.id.container, phraseFragment)
.addToBackStack("phrase")
.commit();
}
答案 0 :(得分:0)
它有点晚了但也许这可以帮助别人。
当我在后台打开活动时调用onNewIntent。当您将意图发送给不在后台运行的活动时,您可以通过onResume()上的getIntent检索它。
我会将您的代码更改为以下内容。
@Override
protected void onResume() {
super.onResume();
Intent intent = getIntent();
String activeName = intent.getStringExtra("Alarm Name");
if (activeName != null){
PhraseFragment phraseFragment = new PhraseFragment();
Bundle args = new Bundle();
args.putString("activeName", activeName);
phraseFragment.setArguments(args);
getFragmentManager().beginTransaction()
.replace(R.id.container, phraseFragment)
.addToBackStack("phrase")
.commit();
}
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
}
在这种情况下,您需要检查您在onResume()中收到的意图是否包含您需要的数据。
请注意,我在文档中未找到任何对此的引用。这只是我通过实验得到的结论。