现在的位置: 首页 > 综合 > 正文

android 设置提醒事件

2018年02月10日 ⁄ 综合 ⁄ 共 3060字 ⁄ 字号 评论关闭

1,启动service

        Intent intent = new Intent(this,AutoTaskService.class);
        intent.putExtra("reminder_event", reminderModel);
        startService(intent);

2,service file 

public class AutoTaskService extends Service {

    private ReminderModel mReminderModel = null;
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }

    @Override
    public void onStart(Intent intent, int startId) {
        if(intent == null)
            return;
        
        if(intent.hasExtra("reminder_event")) {
            mReminderModel = (ReminderModel) intent.getSerializableExtra("reminder_event");
        }
        setReminderEvent();
        
        super.onStart(intent, startId);
    }

    
    /**
     * set reminder event
     */
    private void setReminderEvent() {
        if(mReminderModel == null)
            return;
        if(TextUtils.isEmpty(mReminderModel.reminderStartTime))
            return;
        if(TextUtils.isEmpty(mReminderModel.reminderTime))
            return;
        
        Calendar cal = getCalendarFromDate(mReminderModel.reminderStartTime);
        String[] array = mReminderModel.reminderTime.split("-");
        for(int i = 0; i < array.length; i++) {
            if(i == 0) {
                cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(array[0]));
            } else if (i == 1) {
                cal.set(Calendar.MINUTE, Integer.parseInt(array[1]));
            }
        }
        cal.set(Calendar.SECOND, 0);
        
        Intent intent = new Intent(AutoTaskService.this, AlarmReceiver.class);
        if(!TextUtils.isEmpty(mReminderModel.reminderPath)) {
            intent.putExtra("reminder_pic_path", mReminderModel.reminderPath);
        }
        PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
     // 获取AlarmManager对象
        AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
     // AlarmManager.RTC_WAKEUP休眠时会运行,如果是AlarmManager.RTC,在休眠时不会运行
        am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pi);
    }
    
    /**
     * @param date format is 2012-9-18
     * @return Calendar value is after set date's value
     */
    private Calendar getCalendarFromDate(final String date) {
        int year = 0;
        int month = 0;
        int day = 0;
        try {
            String[] array = date.split("-");
            int[] arrayInt = new int[array.length];
            for (int i = 0; i < array.length; i++) {
                arrayInt[i] = Integer.parseInt(array[i]);
                if(i == 0) {
                    year = arrayInt[0];
                } else if(i == 1){
                    month = arrayInt[1];
                } else if(i == 2){
                    day = arrayInt[2];
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        
        Calendar cal = Calendar.getInstance();
        if(year > 0 && month >= 0 && day >= 0) {
            cal.set(year, month - 1, day);
        }
        
        return cal;
    }
}

3 定时接收器

public class AlarmReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        String path = null;
        if(intent.hasExtra("reminder_pic_path")) {
            path = intent.getStringExtra("reminder_pic_path");
        }
        Log.i("======> AlarmReceiver", path);
        // 启动通知activity
        Intent it = new Intent(context, FingerPaint.class);
        it.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        if(!TextUtils.isEmpty(path)) {
            it.putExtra("reminder_pic_path", path);
        }
        context.startActivity(it);
    }
}

抱歉!评论已关闭.