从0开始认识android(五):创建系统闹钟、倒计时和日历事件的Intent

1、创建闹钟和倒计时 
必须的权限: 
< uses-permission android:name=”com.android.alarm.permission.SET_ALARM” /> 
闹钟:如果我们借助AlarmManager开发一个用药提醒的APP,一旦APP进程被用户干掉后,就没法提醒了,这时我们就只能借助系统闹钟来曲线救国了。

private void createAlarm(String message, int hour, int minutes, int resId) {
        ArrayList<Integer> testDays = new ArrayList<>();
        testDays.add(Calendar.MONDAY);//周一
        testDays.add(Calendar.TUESDAY);//周二
        testDays.add(Calendar.FRIDAY);//周五

        String packageName = getApplication().getPackageName();
        Uri ringtoneUri = Uri.parse("android.resource://" + packageName + "/" + resId);
        //action为AlarmClock.ACTION_SET_ALARM
        Intent intent = new Intent(AlarmClock.ACTION_SET_ALARM)
                //闹钟的小时
                .putExtra(AlarmClock.EXTRA_HOUR, hour)
                //闹钟的分钟
                .putExtra(AlarmClock.EXTRA_MINUTES, minutes)
                //响铃时提示的信息
                .putExtra(AlarmClock.EXTRA_MESSAGE, message)
                //用于指定该闹铃触发时是否振动
                .putExtra(AlarmClock.EXTRA_VIBRATE, true)
                //一个 content: URI,用于指定闹铃使用的铃声,也可指定 VALUE_RINGTONE_SILENT 以不使用铃声。
                //如需使用默认铃声,则无需指定此 extra。
                .putExtra(AlarmClock.EXTRA_RINGTONE, ringtoneUri)
                //一个 ArrayList,其中包括应重复触发该闹铃的每个周日。
                // 每一天都必须使用 Calendar 类中的某个整型值(如 MONDAY)进行声明。
                //对于一次性闹铃,无需指定此 extra
                .putExtra(AlarmClock.EXTRA_DAYS, testDays)
                //如果为true,则调用startActivity()不会进入手机的闹钟设置界面
                .putExtra(AlarmClock.EXTRA_SKIP_UI, true);
        if (intent.resolveActivity(getPackageManager()) != null) {
            startActivity(intent);
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

倒计时

 public void startTimer(String message, int seconds) {
 //action为AlarmClock.ACTION_SET_TIMER
        Intent intent = new Intent(AlarmClock.ACTION_SET_TIMER)
                .putExtra(AlarmClock.EXTRA_MESSAGE, message)
                //倒计总时长,以秒为单位
                .putExtra(AlarmClock.EXTRA_LENGTH, seconds)
                //是否要进入系统的倒计时设置界面
                .putExtra(AlarmClock.EXTRA_SKIP_UI, false);
        if (intent.resolveActivity(getPackageManager()) != null) {
            startActivity(intent);
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

2、添加系统日历事件

public void addCalendarEvent(String title,String desc, String location) {
        Calendar beginC = Calendar.getInstance();
        beginC.add(Calendar.DAY_OF_MONTH,1);
        Calendar endC = Calendar.getInstance();
        endC.add(Calendar.DAY_OF_MONTH,6);
        //action为Intent.ACTION_INSERT
        Intent intent = new Intent(Intent.ACTION_INSERT)
                .setData(CalendarContract.Events.CONTENT_URI)
                //事件的开始时间(从新纪年开始计算的毫秒数)。
                .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, beginC)
                //事件的结束时间(从新纪年开始计算的毫秒数)。
                .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endC)
                //指定此事件是否为全天事件。
                .putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY,true)
                //事件地点。
                .putExtra(CalendarContract.Events.EVENT_LOCATION, location)
                //事件标题。
                .putExtra(CalendarContract.Events.TITLE, title)
                //事件说明
                .putExtra(CalendarContract.Events.DESCRIPTION,desc);
        if (intent.resolveActivity(getPackageManager()) != null) {
            startActivity(intent);
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

这里写图片描述这里写图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值