文章目录

  • 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 日历事件 获取最近日程相关推荐

  1. 日历 android 周历,Android Studio 基础 之 获取系统Calendar 日历日程 (涉及指定日期时间判断是星期几的方法使用)的方法整理...

    Android Studio 基础 之 获取系统Calendar 日历日程 (涉及指定日期时间判断是星期几的方法使用)的方法整理 目录 Android Studio 基础 之 获取系统Calendar ...

  2. Android Studio 基础 之 获取系统Calendar 日历日程(可获得当天以后可设定天数范围内的日历日程) (涉及指定日期时间判断是星期几的方法使用)的方法整理

    Android Studio 基础 之 获取系统Calendar 日历日程(可获得当天以后可设定天数范围内的日历日程) (涉及指定日期时间判断是星期几的方法使用)的方法整理 目录 Android St ...

  3. android 日历事件添加日程

    android 日历事件添加日程 最近公司项目测出bug-----问题是 小米和华为手机 如果锁屏或者杀死APP 闹钟服务不会有反应...就是 恩 死了-这就很尴尬了-问了下好几个群的群友..都说 小 ...

  4. Android 添加Calendar日历提醒事件

    本文介绍如何在Android App中添加或删除一个提前10分钟提醒的日历日程. 实现分为两部分:申请Calendar权限:添加或删除日历日程. 相关知识:Android申请权限 完整代码下载 一.申 ...

  5. android 仿三星周日历,Android Calendar Provider(日历事件)

    这篇文章的目的 写这篇文章的目的,主要是为了记录在日历事件中遇到的2个比较少见,在网上比较难查找资料的问题. 应用背景: 在应用中通过ContentProvider操作系统日历,向系统日历中添加.更新 ...

  6. 【Android】通知准时送达之日历事件

    索引 案例 写在前面 为什么要添加日历事件,有哪些好处 添加日历事件方案 相关数据表 添加权限 日历账户 日历事件 扩展 案例 场景:商城会在10点发起对一件商品的秒杀,要求客户端在10点之前五分钟通 ...

  7. 创建外部快照_快照事件:现在如何仅通过拍照即可创建日历事件

    创建外部快照 by Arjun Krishna Babu 通过Arjun Krishna Babu 快照事件:现在如何仅通过拍照即可创建日历事件 (Snap Event: How you can no ...

  8. 19.0~19.11 Dates, Calendars, and Events 日历事件的处理

    测试代码 19.0. Introduction(Dates, Calendars, and Events) Event Kit and Event Kit UI frameworks 允许你访问日历数 ...

  9. android日历事件 简书,iOS EventKit 添加日历及提醒事项(重复提醒)

    EventKit是在iOS和OS X下都可以使用的框架.今天主要展示的是如何给提醒事件添加重复提醒. 简单来说EKEvent 添加的事件在日历项中展示,EKReminder 添加的事件在提醒事项中展示 ...

最新文章

  1. Python过渡性模块重载(递归重载模块)
  2. [optee]-optee的加解密接口的介绍
  3. 最新开源JavaScript 图表库 ECharts推荐
  4. 【H264/AVC 句法和语义详解】(五):Exp-Golomb指数哥伦布编码(理论篇)
  5. 开机自启动程序关闭方法_电脑非常卡,总有软件偷偷自启动?学会这1招,永久关闭它们!...
  6. MIME协议及源邮件格式分析
  7. java从哪学到哪_Java JVM怎么学习啊?从哪方面入手?
  8. webpack快速学习2
  9. 项目风险管理课程学习
  10. python爬虫如何连接数据库_Python爬虫框架和数据库连接
  11. Python argv小结
  12. caffe安装+Ubuntu16.04+三显卡gpu加速
  13. 凭借这份diao炸天的资料,狂刷三遍成功从外包进入了字节跳动!
  14. 电容击穿之后是开路还是短路?
  15. 网上传的京东撸货为什么那么火?
  16. Celery介绍--手机短信异步发送
  17. Java常用消息摘要算法-MD5
  18. Web开发基础_Servlet学习_0011_Servlet中的多线程安全问题与Servlet运行原理
  19. 上海熙有网络科技集团有限公司获顺为资本数千万元天使轮融资
  20. 普乐蛙7D动感影院|6d动感电影院|7d动感影院设备

热门文章

  1. 复旦大学管理学院2018年考博(高级微观经济学+管理理论综合)真题
  2. 生物信息学 | 富集分析
  3. MATLAB运用——设计船舶模型
  4. 西门子224/226源码 PLC源码 S7 200源代码 ,测试过一些基础的功能
  5. 我对高考作弊的一些看法
  6. Linux驱动程序教程:如何编写简单的Linux设备驱动程序
  7. 看了 B 站 Elasticsearch 视频的标题,我仿佛看到了内卷的天花板
  8. 多用户商城系统解决方案
  9. java 推拉流_libsrt+ffmpeg推拉流(一)
  10. 指数蛙分享提升百度指数的方法教程