使用广播接收器和点击操作来安排通知

时间:2016-07-01 12:01:01

标签: android android-notifications

我是Android的新手,目前正在学习通知,我正在制作一个小应用程序,应该及时显示通知,并且应该在用户点击它们时打开一个活动。我一直在寻找互联网上的内容,但不能真正理解如何做这两项任务。我正在使用广播接收器,这是我的代码

    Notification.Builder builder = new Notification.Builder(getActivity());
    builder.setContentTitle("Remember to return");
    builder.setContentText(title);
    builder.setSmallIcon(R.drawable.ic_notification);
    builder.setAutoCancel(true);

    //NotificationCompat.Builder builder = new NotificationCompat.Builder(getActivity());

    Notification notification = builder.build();

    Intent notificationIntent = new Intent(getActivity(),NotificationPublisher.class);

    notificationIntent.putExtra(NotificationPublisher.NOTIFICATION_ID,1);
    notificationIntent.putExtra(NotificationPublisher.NOTIFICATION,notification);

    PendingIntent pendingIntent = PendingIntent.getBroadcast(activity,0,notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);


    //long _notificationTimeInMillis = SystemClock.elapsedRealtime()+date.getTime()+getMillisFromHours(6);
    long notificationTimeInMillis = SystemClock.elapsedRealtime() + 5000;
    AlarmManager alarmManager = (AlarmManager)activity.getSystemService(Context.ALARM_SERVICE);
    alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,notificationTimeInMillis,pendingIntent);
    Toast.makeText(activity,"Notification Set",Toast.LENGTH_SHORT);

和收件人

public class NotificationPublisher extends BroadcastReceiver {

    public static String NOTIFICATION_ID = "notification-id";
    public static String NOTIFICATION = "notification";
    @Override
    public void onReceive(Context context, Intent intent) {

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

        Notification notification = intent.getParcelableExtra(NOTIFICATION);
        int id = intent.getIntExtra(NOTIFICATION_ID, 0);
        notificationManager.notify(id, notification);
    }
}

目前,我可以显示通知,我必须进行哪些更改,以便在用户点击通知时打开一项活动(例如HomeActivity.class)。

1 个答案:

答案 0 :(得分:1)

您需要在将打开活动的通知本身上设置待处理意图:

Notification.Builder builder = new Notification.Builder(getActivity());
builder.setContentTitle("Remember to return");
builder.setContentText(title);
builder.setSmallIcon(R.drawable.ic_notification);
builder.setAutoCancel(true);

// add these lines
PendingIntent pi = PendingIntent.getActivity(
    getActivity(),
    REQUEST_CODE_FOR_THIS_ONE,
    new Intent(getActivity(), HomeActivity.class),
    0
);
builder.setContentIntent(pi);

Notification notification = builder.build();