android 设置提醒事件

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);
    }
}

要在 Android 中添加日历事件设置铃声,您可以使用以下步骤: 1. 首先,您需要获取日历的访问权限。可以使用以下代码获取权限: ``` if (ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_CALENDAR) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(context, new String[]{Manifest.permission.WRITE_CALENDAR}, REQUEST_CODE); } ``` 2. 接下来,您需要获取日历 ID。可以使用以下代码获取默认日历 ID: ``` String[] projection = new String[]{CalendarContract.Calendars._ID}; Cursor cursor = getContentResolver().query(CalendarContract.Calendars.CONTENT_URI, projection, CalendarContract.Calendars.VISIBLE + " = 1", null, CalendarContract.Calendars._ID + " ASC"); if (cursor.moveToFirst()) { String calID = cursor.getString(0); } ``` 3. 然后,您可以创建事件并将其添加到日历中。可以使用以下代码创建事件: ``` ContentResolver cr = getContentResolver(); ContentValues values = new ContentValues(); values.put(CalendarContract.Events.DTSTART, startMillis); values.put(CalendarContract.Events.DTEND, endMillis); values.put(CalendarContract.Events.TITLE, title); values.put(CalendarContract.Events.DESCRIPTION, description); values.put(CalendarContract.Events.CALENDAR_ID, calID); values.put(CalendarContract.Events.EVENT_TIMEZONE, timezone); Uri uri = cr.insert(CalendarContract.Events.CONTENT_URI, values); ``` 其中,startMillis 和 endMillis 是事件的开始和结束时间,title 是事件的标题,description 是事件的描述,calID 是日历 ID,timezone 是事件的时区。 4. 最后,您可以为事件设置提醒。可以使用以下代码设置提醒: ``` ContentValues reminderValues = new ContentValues(); reminderValues.put(CalendarContract.Reminders.EVENT_ID, Long.parseLong(uri.getLastPathSegment())); reminderValues.put(CalendarContract.Reminders.MINUTES, minutes); reminderValues.put(CalendarContract.Reminders.METHOD, CalendarContract.Reminders.METHOD_ALERT); Uri reminderUri = cr.insert(CalendarContract.Reminders.CONTENT_URI, reminderValues); ``` 其中,minutes 是提醒的时间提前量(以分钟为单位)。 5. 如果您想要为事件设置自定义铃声,您可以使用以下代码: ``` values.put(CalendarContract.Events.HAS_ALARM, true); values.put(CalendarContract.Events.ALARM_TIME, alarmTime); values.put(CalendarContract.Events.CUSTOM_APP_PACKAGE, packageName); values.put(CalendarContract.Events.CUSTOM_APP_URI, customUri); ``` 其中,alarmTime 是提醒的时间,packageName 是自定义铃声应用程序的包名,customUri 是自定义铃声的 URI。 这些就是在 Android 中添加日历事件设置铃声的步骤。希望对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值