Android移動開發之【Android實戰項目】實現每天定時提醒的功能

有時開發中有這樣的需求,每天幾點定時提醒,滿足條件警報等等,下面就來實現這個功能。

首先新建一個廣播接收者

public class AlarmReceiver  extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.e("--------收到提醒");
         //TODO 實現功能
 
        //重新計時第二天七點的
        Intent i = new Intent(context, RemindService.class);
        context.startService(i);
    }
}

然後創建一個服務

public class RemindService extends Service {
     int count = 0;
     @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
         AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);
        Long secondsNextEarlyMorning = Utils.getSecondsNextEarlyMorning(8);
        Intent i = new Intent(this, AlarmReceiver.class);
        PendingIntent pi = PendingIntent.getBroadcast(this, count++, i, PendingIntent.FLAG_UPDATE_CURRENT);
        manager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + secondsNextEarlyMorning, pi);
        return super.onStartCommand(intent, flags, startId);
    }
 
}

最後獲取當前時間到第二天幾點的時間差

public class Utils {
 
 /**
     * 獲取時間差
     */
    public static Long getSecondsNextEarlyMorning(int num) {
        Calendar cal = Calendar.getInstance();
        if (cal.get(Calendar.HOUR_OF_DAY) - num >= 0) {
            //如果當前時間大於等於8點 就計算第二天的8點的
            cal.add(Calendar.DAY_OF_YEAR, 1);
        } else {
            cal.add(Calendar.DAY_OF_YEAR, 0);
        }
        cal.set(Calendar.HOUR_OF_DAY, num);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.MILLISECOND, 0);
        Long seconds = (cal.getTimeInMillis() - System.currentTimeMillis());
 
        return seconds.longValue();
    }
 
}

就可以實現每天幾點定時任務。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章