【问题标题】:How can one start an activity from BroadcastReceiver?如何从 BroadcastReceiver 开始一项活动?
【发布时间】:2011-11-19 23:43:07
【问题描述】:

我有一个广播接收器(c2dm 推送接收器)。 当我收到推送时,我希望发生这种情况:

  • 启动通知,您将在该通知中转到 StopAlarmActivity(完成!)
  • 如果应用程序在前面,启动 StopAlarmActivity(我如何检查这个)

我的主要问题是我无法让广播接收器为我启动 StopAlarmActivity。

我已经在清单中注册了广播接收器。

这是我用来尝试启动活动的代码:

Intent intentHome = new Intent(context, StopAlarmActivity.class);
          intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
          context.startActivity(intentHome);

这是堆栈跟踪消息:

11-20 00:29:30.514: E/AndroidRuntime(13612): java.lang.RuntimeException:无法启动接收器 com.packagename.PushReceiver:android.util.AndroidRuntimeException: 从 Activity 上下文之外调用 startActivity() 需要 FLAG_ACTIVITY_NEW_TASK 标志。这真的是你想要的吗?

我看到有人说这只是将 FLAG_ACTIVITY_NEW_TASK 添加到意图中,异常也告诉我,所以我真的不明白为什么它不起作用。

有人有想法吗? 提前致谢!

【问题讨论】:

    标签: android android-intent android-activity broadcastreceiver


    【解决方案1】:

    在您的代码中:

    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    

    但您对这项新活动的意图是intentHome。将该行更改为:

    intentHome.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    

    【讨论】:

    • hmm, nop :( 改成这个了,但是同样的错误 Intent intentHome = new Intent(context, StopAlarmActivity.class); intent.setFlags(intentHome.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intentHome);
    • 你和我提供的还是有区别的。 intentHome.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 注意 intentHome
    • 哈哈,我现在真的需要睡觉了 :) 感谢您的意见,它奏效了。
    猜你喜欢
    • 2020-01-29
    • 2021-06-11
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    相关资源
    最近更新 更多