Android如何每天两次显示通知?

时间:2017-04-28 04:44:59

标签: android time notifications alarmmanager

我创建了一个按钮,显示点击通知。但我希望通知每天两次,下午1:45和晚上7:00自动显示。怎么做?

public class MainActivity extends AppCompatActivity {
NotificationCompat.Builder notification;
private static final int uniqueID = 45612 ;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    notification = new NotificationCompat.Builder(this);
    notification.setAutoCancel(true);


}

public void showMe(View view)
{
    //build the notification
    notification.setSmallIcon(R.drawable.bb);
    notification.setColor(Color.rgb(85,85,85));
    notification.setTicker("Time to nap");
    notification.setWhen(System.currentTimeMillis());
    notification.setContentTitle("NapApp");
    notification.setContentText("Going gets tough? take a nap");

    Intent intent = new Intent(this,MainActivity.class);
    PendingIntent pIntent = PendingIntent.getActivity(this,0,intent,PendingIntent.FLAG_UPDATE_CURRENT);  //gives access to intent to our app
    notification.setContentIntent(pIntent);

    //builds notification and issues it
    NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    nm.notify(uniqueID,notification.build());
}

}

2 个答案:

答案 0 :(得分:1)

您必须使用AlarmManager执行此操作。 请按照Android提供的此文档提供。 https://developer.android.com/training/scheduling/alarms.html

答案 1 :(得分:0)

在一天内安排多次通知,使用给定的方法,它将在1.45 PM& 7.00 PM

public void scheduleNotification() {

        Calendar mfiringCal  = Calendar.getInstance();
        Calendar mcurrentCal = Calendar.getInstance();

        mfiringCal.set(Calendar.HOUR_OF_DAY, 13);
        mfiringCal.set(Calendar.MINUTE, 45);
        mfiringCal.set(Calendar.SECOND, 0);

        long intendedTime = mfiringCal.getTimeInMillis();
        long currentTime  = mcurrentCal.getTimeInMillis();

        AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

        if(intendedTime >= currentTime) {

            Intent notificationIntent = new Intent("android.media.action.DISPLAY_NOTIFICATION");
            notificationIntent.addCategory("android.intent.category.DEFAULT");

            PendingIntent broadcast = PendingIntent.getBroadcast(this, 100, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);

            alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, mfiringCal.getTimeInMillis(), AlarmManager.INTERVAL_DAY, broadcast);
        }else{

            Intent notificationIntent = new Intent("android.media.action.DISPLAY_NOTIFICATION");
            notificationIntent.addCategory("android.intent.category.DEFAULT");

            PendingIntent broadcast = PendingIntent.getBroadcast(this, 100, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);

            mfiringCal.add(Calendar.DAY_OF_MONTH, 1);
            intendedTime = mfiringCal.getTimeInMillis();

            alarmManager.setRepeating(AlarmManager.RTC, intendedTime, AlarmManager.INTERVAL_DAY, broadcast);
        }






        /*-------------- 2nd Notification ------------- */
        Calendar nFiringCal  = Calendar.getInstance();
        Calendar nCurrentCal = Calendar.getInstance();

        nFiringCal.set(Calendar.HOUR_OF_DAY, 19);
        nFiringCal.set(Calendar.MINUTE, 0);
        nFiringCal.set(Calendar.SECOND, 0);

        long intendedTime1 = nFiringCal.getTimeInMillis();
        long currentTime1  = nCurrentCal.getTimeInMillis();

        if(intendedTime1 >= currentTime1) {

            Intent notificationIntent = new Intent("android.media.action.DISPLAY_NOTIFICATION");
            notificationIntent.addCategory("android.intent.category.DEFAULT");

            PendingIntent broadcast = PendingIntent.getBroadcast(this, 101, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);

            alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, nFiringCal.getTimeInMillis(), AlarmManager.INTERVAL_DAY, broadcast);
        }else{

            Intent notificationIntent = new Intent("android.media.action.DISPLAY_NOTIFICATION");
            notificationIntent.addCategory("android.intent.category.DEFAULT");

            PendingIntent broadcast = PendingIntent.getBroadcast(this, 101, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);

            nFiringCal.add(Calendar.DAY_OF_MONTH, 1);
            intendedTime = nFiringCal.getTimeInMillis();

            alarmManager.setRepeating(AlarmManager.RTC, intendedTime, AlarmManager.INTERVAL_DAY, broadcast);
        }
    }