Onclick通知,在Android中启动活动

时间:2013-01-18 19:20:02

标签: android class android-intent android-activity notifications

我有一个用于创建通知的课程。课程是这样的:

public class TimeAlarm extends BroadcastReceiver {

     NotificationManager nm;

     @Override
     public void onReceive(Context context, Intent intent) {
      nm = (NotificationManager) context
        .getSystemService(Context.NOTIFICATION_SERVICE);
      CharSequence from = "Scheduled Training";
      CharSequence message = "Please attend the scheduled training";
      //Intent notifyIntent = new Intent();



      PendingIntent contentIntent = PendingIntent.getActivity(context, 0, new Intent(), 0);

      Notification notif = new Notification(R.drawable.ic_launcher,
        "NeuroQ Scheduled Training", System.currentTimeMillis());
      notif.setLatestEventInfo(context, from, message, contentIntent);
      nm.notify(1, notif);


     }
    }

我有一个名为 QuizScreen 的活动,点击通知时需要打开该活动。我尝试过使用:

Intent quiz_intent = new Intent(TimeAlarm.this, QuizScreen.class);
                        TimeAlarm.this.startActivity(quiz_intent);

但是我收到了这个错误:

The constructor Intent(TimeAlarm, Class<QuizScreen>) is undefined

我哪里错了?我该如何解决这个问题?

4 个答案:

答案 0 :(得分:3)

使用Intent quiz_intent = new Intent(context, QuizScreen.class);代替Intent quiz_intent = new Intent(TimeAlarm.this, QuizScreen.class);例如,

public class MyBroadcastReceiver extends BroadcastReceiver {
  private NotificationManager mNotificationManager;
  private int SIMPLE_NOTFICATION_ID;

  @Override
  public void onReceive(Context context, Intent intent) {
    mNotificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
    Notification notifyDetails = new Notification(R.drawable.android,"Time Reset!",System.currentTimeMillis());
    PendingIntent myIntent = PendingIntent.getActivity(context, 0, new Intent(context, Second.class), 0);
    notifyDetails.setLatestEventInfo(context, "Time changed", "Click on me to view my second activity", myIntent);
    notifyDetails.flags |= Notification.FLAG_AUTO_CANCEL;

    mNotificationManager.notify(SIMPLE_NOTFICATION_ID, notifyDetails);
  }
}

答案 1 :(得分:1)

广播接收器不算作上下文? 使用onReceive中的context参数(Context context,Intent intent)来代替

答案 2 :(得分:1)

尝试下面的代码来启动活动

Intent quiz_intent = new Intent(context, QuizScreen.class);
                        TimeAlarm.this.startActivity(quiz_intent);

基本上,正如尼克拉斯所说,Receiver并不算作上下文,所以你需要使用上传你的onReceive方法,或者像context.getApplicationContext一样使用它。

答案 3 :(得分:0)

使用: Intent quiz_intent = new Intent(context, QuizScreen.class);代替Intent quiz_intent = new Intent(TimeAlarm.this, QuizScreen.class);

例如:

public class MyBroadcastReceiver extends BroadcastReceiver {

private NotificationManager mNotificationManager;
private int SIMPLE_NOTFICATION_ID;

@Override
public void onReceive(Context context, Intent intent) {

    mNotificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
    Notification notifyDetails = new Notification(R.drawable.android,"Time Reset!",System.currentTimeMillis());
    PendingIntent myIntent = PendingIntent.getActivity(context, 0, new Intent(context, Second.class), 0);
    notifyDetails.setLatestEventInfo(context, "Time changed", "Click on me to view my second activity", myIntent);
    notifyDetails.flags |= Notification.FLAG_AUTO_CANCEL;

    mNotificationManager.notify(SIMPLE_NOTFICATION_ID, notifyDetails);`