Android 设置系统闹钟,日历写入。实现demo

实现方法1——代码闹钟 

可变时间格式:"yyyy-MM-dd HH:mm:ss"

保存闹钟时间:

  • SimpleDateFormat df = new SimpleDateFormat("HH:mm");//设置日期格式

  • String thistime = df.format(new Date());

  • SharedPreferences sharedPreferences = getSharedPreferences("industryInfo", Context.MODE_PRIVATE); //私有数据

  • SharedPreferences.Editor editor = sharedPreferences.edit();//获取编辑器

  • editor.putString(“retime”, thistime);//名称 id

  • editor.commit();//提交

监听时间变化:

监听service

/**
 * 作者:created by meixi
 * 邮箱:13164716840@163.com
 * 日期:2018/9/27 09
 */
public class Serview extends Service {

    /**
     * 广播接受者
     */
    private BroadcastReceiver mBatInfoReceiver;
    private String TAG = "lgq--------------------";
    @Override
    public void onCreate() {
        super.onCreate();
        initBroadcastReceiver();
    }


    /**
     * 注册广播
     */
    private void initBroadcastReceiver() {
        final IntentFilter filter = new IntentFilter();
        // 屏幕灭屏广播
        filter.addAction(Intent.ACTION_SCREEN_OFF);
        //关机广播
        filter.addAction(Intent.ACTION_SHUTDOWN);
        // 屏幕亮屏广播
        filter.addAction(Intent.ACTION_SCREEN_ON);
        // 屏幕解锁广播
//        filter.addAction(Intent.ACTION_USER_PRESENT);
        // 当长按电源键弹出“关机”对话或者锁屏时系统会发出这个广播
        // example:有时候会用到系统对话框,权限可能很高,会覆盖在锁屏界面或者“关机”对话框之上,
        // 所以监听这个广播,当收到时就隐藏自己的对话,如点击pad右下角部分弹出的对话框
        filter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
        //监听日期变化
        filter.addAction(Intent.ACTION_DATE_CHANGED);
        filter.addAction(Intent.ACTION_TIME_CHANGED);
        filter.addAction(Intent.ACTION_TIME_TICK);

        mBatInfoReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(final Context context, final Intent intent) {
                String action = intent.getAction();
                if (Intent.ACTION_SCREEN_ON.equals(action)) {
                    Log.i(TAG, "screen on");
                } else if (Intent.ACTION_TIME_TICK.equals(action)) {//日期变化步数重置为0
                    Log.i("lgq0000000000000000","日期变化步数重置为0===="+action);
                    SharedPreferences share = getSharedPreferences("industryInfo", Activity.MODE_PRIVATE);
                    String industryOne = share.getString("retime", "");//名称 获取id

                    if (industryOne.equals(new SimpleDateFormat("HH:mm").format(new Date()))){
                        //todo   闹钟到了
                    }

                }
            }
        };
        registerReceiver(mBatInfoReceiver, filter);
    }




    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}
<service android:name=".testt.Serview">

    <intent-filter>
        <!-- 系统启动完成后会调用-->
        <action android:name="android.intent.action.BOOT_COMPLETED" />
        <action android:name="android.intent.action.DATE_CHANGED" />
        <action android:name="android.intent.action.MEDIA_MOUNTED" />
        <action android:name="android.intent.action.USER_PRESENT" />
        <action android:name="android.intent.action.ACTION_TIME_TICK" />
        <action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
        <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
    </intent-filter>
</service>

    /**
     * 开启计步服务
     */
    private void setupService() {
        Intent intent = new Intent(this, Serview.class);
//        isBind = bindService(intent, conn, Context.BIND_AUTO_CREATE);
        startService(intent);
    }

实现方法2——设置系统闹钟 、写入日历

闹钟

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

 日历

      //添加日历事件
        Calendar mCalendar = Calendar.getInstance();
        mCalendar.setTimeInMillis(reminderTime);//设置开始时间
        long start = mCalendar.getTime().getTime();
        mCalendar.setTimeInMillis(start + 10 * 60 * 1000);//设置终止时间,开始时间加10分钟
        long end = mCalendar.getTime().getTime();
        ContentValues event = new ContentValues();
        event.put("title", title);
        event.put("description", description);
        event.put("calendar_id", calId); //插入账户的id
        event.put(CalendarContract.Events.DTSTART, start);
        event.put(CalendarContract.Events.DTEND, end);
        event.put(CalendarContract.Events.HAS_ALARM, 1);//设置有闹钟提醒
        event.put(CalendarContract.Events.EVENT_TIMEZONE,timeZoneId);//这个是时区,必须有
//        event.put(CalendarContract.Events.EVENT_LOCATION,location);//写入日历地点
        // 定义事件的显示,默认即可
        event.put(CalendarContract.Events.ACCESS_LEVEL, CalendarContract.Events.ACCESS_DEFAULT);
        // 事件的状态
        event.put(CalendarContract.Events.STATUS, 0);
        // 设置事件忙
        event.put(CalendarContract.Events.AVAILABILITY, CalendarContract.Events.AVAILABILITY_BUSY);

在线bug交流:QQ 1085220040 

demo 连接:https://download.csdn.net/download/meixi_android/87163876 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值