实现方法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--------------------";@Overridepublic 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() {@Overridepublic 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)) {//日期变化步数重置为0Log.i("lgq0000000000000000","日期变化步数重置为0===="+action);SharedPreferences share = getSharedPreferences("industryInfo", Activity.MODE_PRIVATE);String industryOne = share.getString("retime", "");//名称 获取idif (industryOne.equals(new SimpleDateFormat("HH:mm").format(new Date()))){//todo 闹钟到了}}}};registerReceiver(mBatInfoReceiver, filter);}@Nullable@Overridepublic 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); //插入账户的idevent.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