从通知释放器意图到已启动的活动获取捆绑的额外内容

时间:2016-10-02 01:33:26

标签: android android-intent

我有一个通知接收器正在从我的闹钟中调出。

通知接收器捆绑新意图(活动)的数据并按如下方式启动:

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

不确定我做错了什么。

提前感谢您的帮助。

3 个答案:

答案 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()

在活动方面,无需进行任何更改。