我有一个通知接收器正在从我的闹钟中调出。
通知接收器捆绑新意图(活动)的数据并按如下方式启动:
// Create an in intent to go to the new alarm video
Intent repeatingAlarmIntent = new Intent(context,RepeatingAlarmActivity.class);
// Bundle the videoID the alarm has the correct video to open
Bundle alarmExtras = new Bundle();
extras.putString("AlarmVidId", VideoId);
repeatingAlarmIntent.putExtras(alarmExtras);
// Set the flags for the alarm intent
repeatingAlarmIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
repeatingAlarmIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// Start the alarm intent
context.startActivity(repeatingAlarmIntent);
在新活动中,当我尝试检索捆绑数据时,它为null,这就是我尝试检索捆绑数据的方式:
public class RepeatingAlarmActivity extends YouTubeBaseActivity implements YouTubePlayer.OnInitializedListener {
String VideoId;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
VideoId= intent.getStringExtra("AlarmVidId");
不确定我做错了什么。
提前感谢您的帮助。
答案 0 :(得分:1)
将以下内容全部替换为:
Intent repeatingAlarmIntent = new Intent(context,RepeatingAlarmActivity.class);
repeatingAlarmIntent.putExtra("AlarmVidId", VideoId);
repeatingAlarmIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
repeatingAlarmIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(repeatingAlarmIntent);
您的问题是您创建了一个名为Bundle
的{{1}},但是您将额外的字段放在名为alarmExtras
的变量中。
无需创建extra
。只需将值直接添加到Bundle
。
另外,你正在做Intent
。如果您需要多个,请改为setFlags()
答案 1 :(得分:0)
调用putString时extras
变量与alarmExtras
不匹配正在添加到Intent。
Bundle alarmExtras = new Bundle();
alarmExtras.putString("AlarmVidId", VideoId);
repeatingAlarmIntent.putExtras(alarmExtras);
答案 2 :(得分:0)
我制定了一个解决方案。
我很确定这是因为通知接收器的生命周期和上下文。
因此,不是使用启动接收器时传递的上下文,而是使用该上下文来获取应用程序上下文。
这种方法有效,但我欢迎对这种方法的潜在问题发表评论,因为我以前从未解决过这样的问题。
这对我有用:
// Create an in intent to go to the new alarm video
Intent repeatingAlarmIntent = new Intent(context.getApplicationContext(),RepeatingAlarmActivity.class);
// Bundle the videoID the alarm has the correct video to open
Bundle alarmExtras = new Bundle();
extras.putString("AlarmVidId", VideoId);
repeatingAlarmIntent.putExtras(alarmExtras);
// Set the flags for the alarm intent
repeatingAlarmIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
repeatingAlarmIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// Start the alarm intent
context.getApplicationContext().startActivity(repeatingAlarmIntent);
在创建意图和启动意图时,现在有:
getApplicationContext()
在活动方面,无需进行任何更改。