calendar 日历事件 获取最近日程
文章目录
- 1、简介
- 2、目录结构
- 3、AndroidManifest 文件
- 4、功能文件
- 5、log 日志打印
1、简介
获取日历中设置的距离当前最近的日程
2、目录结构
3、AndroidManifest 文件
添加关于日历的相关权限
<uses-permission android:name="android.permission.READ_CALENDAR"/><uses-permission android:name="android.permission.WRITE_CALENDAR"/>
4、功能文件
package com.example.tssh.mycalendar;import android.Manifest;
import android.content.pm.PackageManager;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Handler;
import android.provider.CalendarContract;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;import org.json.JSONObject;import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;public class MainActivity extends AppCompatActivity {private String TAG = "MainActivity: ";private static String CALENDER_EVENT_URL = "content://com.android.calendar/events";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);checkPermission(); //权限检查registerObserver(); //注册日程事件改变监听getCalendarEvent(); //获得 日历事件}//获得日历数据private void getCalendarEvent() {String startTime = "";String endTime = "";String eventTitle = "";String description = "";String location = "";long startEventTime ;long currentTime ;List<Long> listTime;listTime = new ArrayList<Long>();Map map = new HashMap();//创建Map 集合Cursor eventCursor = getContentResolver().query(Uri.parse(CALENDER_EVENT_URL), null,null, null, null);while (eventCursor.moveToNext()) {Log.i(TAG,"·········································· " );eventTitle = eventCursor.getString(eventCursor.getColumnIndex("title")); //获取日历事件 的标题description = eventCursor.getString(eventCursor.getColumnIndex("description")); //获取日历事件 的描述location = eventCursor.getString(eventCursor.getColumnIndex("eventLocation")); //获取日历事件 的地点startEventTime = Long.parseLong(eventCursor.getString(eventCursor.getColumnIndex("dtstart"))); //获取 日程 开始的时间Log.i(TAG,"startEventTime: " + startEventTime);currentTime = Calendar.getInstance().getTimeInMillis(); //获取当前时间Log.i(TAG,"currentTime: " + currentTime);if (startEventTime > currentTime) { //当日历设定时间大于当前时间listTime.add(startEventTime);map.put(startEventTime,description);//存储键值}startTime = timeStamp2Date(startEventTime);endTime = timeStamp2Date(Long.parseLong(eventCursor.getString(eventCursor.getColumnIndex("dtend")))); //获取日程结束的时间Log.i(TAG,"eventTitle: " + eventTitle + "\n" +"description: " + description + "\n" +"location: " + location + "\n" +"startTime: " + startTime + "\n" +"endTime: " + endTime + "\n");}Collections.sort(listTime); //将list 从小到大排序 根据时间大小 获取最近事件Object value = map.get(listTime.get(0)); //获取键所对应的值Log.i(TAG,"获取最近一次事件:" + value);}//当有日历日程修改时到来时 调用 onChange 函数private ContentObserver newCalendarContentObserver = new ContentObserver(new Handler()) {public void onChange(boolean selfChange) {System.out.println("接收到的日历事件监听");getCalendarEvent();}};private void registerObserver() {getContentResolver().registerContentObserver(CalendarContract.Events.CONTENT_URI, true,newCalendarContentObserver);}private synchronized void unregisterObserver() {try {if (newCalendarContentObserver != null) {getContentResolver().unregisterContentObserver(newCalendarContentObserver);}} catch (Exception e) {Log.e(TAG, "unregisterObserver fail");}}//sd 卡权限检查private void checkPermission() {if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_CALENDAR)!= PackageManager.PERMISSION_GRANTED &&ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_CALENDAR)!= PackageManager.PERMISSION_GRANTED) {Log.i(TAG,"没有权限进行申请");ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CALENDAR,Manifest.permission.WRITE_CALENDAR},100);} else {Log.i(TAG,"已经有权限");}}//sd 卡权限申请@Overridepublic void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {if(requestCode == 100){if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {Log.i(TAG,"用户同意权限申请");} else {Log.i(TAG,"用户不同意权限申请");}}}/*** 时间戳转换为字符串* @param time:时间戳* @return*/private static String timeStamp2Date(long time) {String format = "yyyy-MM-dd HH:mm:ss";SimpleDateFormat sdf = new SimpleDateFormat(format);return sdf.format(new Date(time));}protected void onDestroy() {unregisterObserver();super.onDestroy();}}
5、log 日志打印
文献参考:
Android Calendar Provider(日历事件)
https://blog.csdn.net/wlwh90/article/details/70765860
Android–日历事件获取
https://blog.csdn.net/chaoyu168/article/details/81187327
安卓日历日程事件获取和监听汇总
https://blog.csdn.net/lanbojini1209/article/details/55510891
通过registerContentObserver(注册监听者)配合URI来实现恶意敏感信息窃取相关
https://blog.csdn.net/u014021893/article/details/59109403
calendar 日历事件 获取最近日程相关推荐
- 日历 android 周历,Android Studio 基础 之 获取系统Calendar 日历日程 (涉及指定日期时间判断是星期几的方法使用)的方法整理...
Android Studio 基础 之 获取系统Calendar 日历日程 (涉及指定日期时间判断是星期几的方法使用)的方法整理 目录 Android Studio 基础 之 获取系统Calendar ...
- Android Studio 基础 之 获取系统Calendar 日历日程(可获得当天以后可设定天数范围内的日历日程) (涉及指定日期时间判断是星期几的方法使用)的方法整理
Android Studio 基础 之 获取系统Calendar 日历日程(可获得当天以后可设定天数范围内的日历日程) (涉及指定日期时间判断是星期几的方法使用)的方法整理 目录 Android St ...
- android 日历事件添加日程
android 日历事件添加日程 最近公司项目测出bug-----问题是 小米和华为手机 如果锁屏或者杀死APP 闹钟服务不会有反应...就是 恩 死了-这就很尴尬了-问了下好几个群的群友..都说 小 ...
- Android 添加Calendar日历提醒事件
本文介绍如何在Android App中添加或删除一个提前10分钟提醒的日历日程. 实现分为两部分:申请Calendar权限:添加或删除日历日程. 相关知识:Android申请权限 完整代码下载 一.申 ...
- android 仿三星周日历,Android Calendar Provider(日历事件)
这篇文章的目的 写这篇文章的目的,主要是为了记录在日历事件中遇到的2个比较少见,在网上比较难查找资料的问题. 应用背景: 在应用中通过ContentProvider操作系统日历,向系统日历中添加.更新 ...
- 【Android】通知准时送达之日历事件
索引 案例 写在前面 为什么要添加日历事件,有哪些好处 添加日历事件方案 相关数据表 添加权限 日历账户 日历事件 扩展 案例 场景:商城会在10点发起对一件商品的秒杀,要求客户端在10点之前五分钟通 ...
- 创建外部快照_快照事件:现在如何仅通过拍照即可创建日历事件
创建外部快照 by Arjun Krishna Babu 通过Arjun Krishna Babu 快照事件:现在如何仅通过拍照即可创建日历事件 (Snap Event: How you can no ...
- 19.0~19.11 Dates, Calendars, and Events 日历事件的处理
测试代码 19.0. Introduction(Dates, Calendars, and Events) Event Kit and Event Kit UI frameworks 允许你访问日历数 ...
- android日历事件 简书,iOS EventKit 添加日历及提醒事项(重复提醒)
EventKit是在iOS和OS X下都可以使用的框架.今天主要展示的是如何给提醒事件添加重复提醒. 简单来说EKEvent 添加的事件在日历项中展示,EKReminder 添加的事件在提醒事项中展示 ...
最新文章
- Python过渡性模块重载(递归重载模块)
- [optee]-optee的加解密接口的介绍
- 最新开源JavaScript 图表库 ECharts推荐
- 【H264/AVC 句法和语义详解】(五):Exp-Golomb指数哥伦布编码(理论篇)
- 开机自启动程序关闭方法_电脑非常卡,总有软件偷偷自启动?学会这1招,永久关闭它们!...
- MIME协议及源邮件格式分析
- java从哪学到哪_Java JVM怎么学习啊?从哪方面入手?
- webpack快速学习2
- 项目风险管理课程学习
- python爬虫如何连接数据库_Python爬虫框架和数据库连接
- Python argv小结
- caffe安装+Ubuntu16.04+三显卡gpu加速
- 凭借这份diao炸天的资料,狂刷三遍成功从外包进入了字节跳动!
- 电容击穿之后是开路还是短路?
- 网上传的京东撸货为什么那么火?
- Celery介绍--手机短信异步发送
- Java常用消息摘要算法-MD5
- Web开发基础_Servlet学习_0011_Servlet中的多线程安全问题与Servlet运行原理
- 上海熙有网络科技集团有限公司获顺为资本数千万元天使轮融资
- 普乐蛙7D动感影院|6d动感电影院|7d动感影院设备