状态栏通知自动启动活动

时间:2015-02-05 19:15:27

标签: android android-activity notifications scheduled-tasks statusbar

我正在尝试进行预定通知。所有工作除外:当应用程序处于活动状态并最小化通知自动启动活动,无需等待用户点击它。

回想起来:

 public void onReceive(Context context, Intent paramIntent) {

        Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);


        NotificationManager notificationManager = (NotificationManager) context
                .getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.cancelAll();
        Notification notification = new Notification(R.drawable.logo_f, context.getResources().getString(R.string.notification_text), System.currentTimeMillis());

        Intent notificationIntent = new Intent(context, TimeLeftActivity.class);

        notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
                | Intent.FLAG_ACTIVITY_SINGLE_TOP);

        PendingIntent intent = PendingIntent.getActivity(context, 0,
                notificationIntent, 0);

        notification.setLatestEventInfo(context, context.getResources().getString(R.string.notification_text), "", intent);
        notification.flags |= Notification.FLAG_AUTO_CANCEL;
        notification.sound=alarmSound;
        // Fire the notification
        notificationManager.notify(1, notification);


    }

我的通知启动方法:

 private void createScheduledNotification(int sec)
    {
        // Get new calendar object and set the date to now
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        // Add defined amount of days to the date
        calendar.add(Calendar.SECOND, sec);

        // Retrieve alarm manager from the system
        AlarmManager alarmManager = (AlarmManager) getApplicationContext().getSystemService(getBaseContext().ALARM_SERVICE);

        // Every scheduled intent needs a different ID, else it is just executed once
        int id = 1;

        // Prepare the intent which should be launched at the date
        Intent intent = new Intent(this, TimeAlarm.class);

        // Prepare the pending intent
        PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        alarmManager.cancel(pendingIntent);
        // Register the alert in the system. You have the option to define if the device has to wake up on the alert or not
        alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
    }

在Kirill回答之后编辑。错误仍然存​​在。通知自动启动待处理的意图,不等待点击。

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

        Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);


        NotificationManager notificationManager = (NotificationManager) context
                .getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.cancelAll();


        Intent notificationIntent = new Intent(context, TimeLeftActivity.class);

        notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
                | Intent.FLAG_ACTIVITY_SINGLE_TOP);

        PendingIntent intent = PendingIntent.getActivity(context, 0,
                notificationIntent, 0);
        Notification notification = new NotificationCompat.Builder(context)
                .setContentTitle(context.getResources().getString(R.string.notification_text))
                .setContentIntent(intent)
                .setSound(alarmSound)
                .build();

        notification.flags |= Notification.FLAG_AUTO_CANCEL;

        // Fire the notification
        notificationManager.notify(1, notification);


    }

1 个答案:

答案 0 :(得分:1)

很难找到错误,因为您在代码中使用了弃用的API,您应该使用Notication.Builder

 Notification noti = new Notification.Builder(mContext)
     .setContentTitle("New mail from " + sender.toString())
     .setContentText(subject)
     .setSmallIcon(R.drawable.new_mail)
     .setLargeIcon(aBitmap)
     .build();

如果您需要支持旧版本,可以使用NotificationCompat

<强>更新

这是来自我的应用程序的示例,它会抛出一个通知,通过点击打开活动,我标记了添加意图的方法。

    String message = context.getString(R.string.notif_message);
    Intent notificationIntent = new Intent(AddBpRecordActivity.ADD_ACTION);

    NotificationCompat.Builder nb = new NotificationCompat.Builder(context)
            .setSmallIcon(R.drawable.ic_notif_logo)
            .setContentTitle(message)
            .setContentText(billet.comment)
            .setDefaults(Notification.DEFAULT_ALL)
            .setAutoCancel(true)
      >>>   .setContentIntent(PendingIntent.getActivity(context, (int) billet.id, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT))
            .setWhen(System.currentTimeMillis());
    Notification notification = nb.build();

    NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify((int) billet.id, notification);