注意!!!

多个重复的事件只会有一条数据,例如创建了一个每天都提醒的事件,获取事件时只会有第一天的数据,其它的时间不会有; 如果你要获取指定几天里面的所有日程事件,请看Android 获取最近几天的日历日程_Choi晨的博客-CSDN博客;

首先获取日历权限

 <uses-permission android:name="android.permission.READ_CALENDAR" /><uses-permission android:name="android.permission.WRITE_CALENDAR" />
static String[] permissions = new String[] { "android.permission.READ_CALENDAR"};ActivityCompat.requestPermissions(activity, permissions, 0);

然后获取日程事件:

获取到的数据如下图

[{"endTime":"2022-06-08 20:55:00","eventTitle":"我是标题","location":"上海","startTime":"2022-06-08 19:15:00","week":"3"},{"description":"说明一下情况啊","endTime":"2022-06-03 20:00:00","eventTitle":"端午节啦啦啦","location":"上海","startTime":"2022-06-03 19:00:00","week":"5"}]

public static ArrayList<CalenderDataStruct> GetCalenderSchedule(Context context){String startTime = "";String endTime = "";String eventTitle = "";String description = "";String location = "";String week = "";ArrayList<CalenderDataStruct> arr=new ArrayList<CalenderDataStruct>();Cursor eventCursor = context.getContentResolver().query(Uri.parse(CALENDER_EVENT_URL), null,null, null,  "dtstart"+" DESC");while (eventCursor.moveToNext()){eventTitle = eventCursor.getString(eventCursor.getColumnIndex("title"));description = eventCursor.getString(eventCursor.getColumnIndex("description"));location = eventCursor.getString(eventCursor.getColumnIndex("eventLocation"));startTime = timeStamp2Date(Long.parseLong(eventCursor.getString(eventCursor.getColumnIndex("dtstart"))));endTime = timeStamp2Date(Long.parseLong(eventCursor.getString(eventCursor.getColumnIndex("dtend"))));week = ""+ (getWeek(startTime));CalenderDataStruct item=new CalenderDataStruct(eventTitle, startTime, endTime,description, location,week);arr.add(item);}return arr;}

全部代码, 获取全部日程事件、获取几天内的日程事件都在下面;

import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.telephony.TelephonyManager;
import android.util.Log;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;public class CalendarUtil {private static final String TAG ="Main_calendarUtil";private static String CALENDER_URL = "content://com.android.calendar/calendars";private static String CALENDER_EVENT_URL = "content://com.android.calendar/events";private static String CALENDER_REMINDER_URL = "content://com.android.calendar/reminders";private static TelephonyManager mTm;// 当天当前的时间变量private  static long currentTime;// 当天之后的几天后的时间变量private  static long afterDayTime = Long.MAX_VALUE;// 一天总共的毫秒数private  static long onedayMS = 1000*60*60*24;/*** 添加从当天开始获取之后几天的日历日程事件* @param context* @param afterDays* @return*/public static ArrayList<CalenderDataStruct> GetCalenderScheduleFormNow(Context context,int afterDays){currentTime = System.currentTimeMillis();if (afterDays > 0){afterDayTime = afterDays * onedayMS +currentTime;}String startTime = "";String endTime = "";String eventTitle = "";String description = "";String location = "";String week = "";ArrayList<CalenderDataStruct> arr=new ArrayList<CalenderDataStruct>();Cursor eventCursor = context.getContentResolver().query(Uri.parse(CALENDER_EVENT_URL), null,null, null,  "dtstart"+" DESC");while (eventCursor.moveToNext()){long dtstart = Long.parseLong(eventCursor.getString(eventCursor.getColumnIndex("dtstart")));// 满足获取条件的日历日程数据if( currentTime < dtstart && dtstart < afterDayTime){eventTitle = eventCursor.getString(eventCursor.getColumnIndex("title"));description = eventCursor.getString(eventCursor.getColumnIndex("description"));location = eventCursor.getString(eventCursor.getColumnIndex("eventLocation"));startTime = timeStamp2Date(Long.parseLong(eventCursor.getString(eventCursor.getColumnIndex("dtstart"))));endTime = timeStamp2Date(Long.parseLong(eventCursor.getString(eventCursor.getColumnIndex("dtend"))));week = ""+ (getWeek(startTime));CalenderDataStruct item=new CalenderDataStruct(eventTitle, startTime, endTime,description, location,week);arr.add(item);}}return arr;}public static ArrayList<CalenderDataStruct> GetCalenderSchedule(Context context){String startTime = "";String endTime = "";String eventTitle = "";String description = "";String location = "";String week = "";ArrayList<CalenderDataStruct> arr=new ArrayList<CalenderDataStruct>();Cursor eventCursor = context.getContentResolver().query(Uri.parse(CALENDER_EVENT_URL), null,null, null,  "dtstart"+" DESC");while (eventCursor.moveToNext()){eventTitle = eventCursor.getString(eventCursor.getColumnIndex("title"));description = eventCursor.getString(eventCursor.getColumnIndex("description"));location = eventCursor.getString(eventCursor.getColumnIndex("eventLocation"));startTime = timeStamp2Date(Long.parseLong(eventCursor.getString(eventCursor.getColumnIndex("dtstart"))));endTime = timeStamp2Date(Long.parseLong(eventCursor.getString(eventCursor.getColumnIndex("dtend"))));week = ""+ (getWeek(startTime));CalenderDataStruct item=new CalenderDataStruct(eventTitle, startTime, endTime,description, location,week);arr.add(item);}return arr;}private static JSONArray getCalendar(Context context){String startTime = "";String endTime = "";String eventTitle = "";String description = "";String location = "";JSONArray arr=new JSONArray();Cursor eventCursor = context.getContentResolver().query(Uri.parse(CALENDER_EVENT_URL), null,null, null, null);while (eventCursor.moveToNext()){JSONObject json=new JSONObject();eventTitle = eventCursor.getString(eventCursor.getColumnIndex("title"));description = eventCursor.getString(eventCursor.getColumnIndex("description"));location = eventCursor.getString(eventCursor.getColumnIndex("eventLocation"));startTime = timeStamp2Date(Long.parseLong(eventCursor.getString(eventCursor.getColumnIndex("dtstart"))));endTime = timeStamp2Date(Long.parseLong(eventCursor.getString(eventCursor.getColumnIndex("dtend"))));try {json.put("eventTitle",eventTitle);json.put("description",description);json.put("location",location);json.put("startTime",startTime);json.put("endTime",endTime);} catch (JSONException e) {e.printStackTrace();}arr.put(json);}return arr;}/*** 时间戳转换为字符串* @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));}/*** 判断当前日期是星期几** @param  pTime     设置的需要判断的时间  //格式如2012-09-08** @return dayForWeek 判断结果* @Exception 发生异常*///  String pTime = "2012-03-12";private static int getWeek(String pTime) {int Week = 0;SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Calendar c = Calendar.getInstance();try {c.setTime(format.parse(pTime));} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}if (c.get(Calendar.DAY_OF_WEEK) == 1) {Week = 0;}if (c.get(Calendar.DAY_OF_WEEK) == 2) {Week = 1;}if (c.get(Calendar.DAY_OF_WEEK) == 3) {Week = 2;}if (c.get(Calendar.DAY_OF_WEEK) == 4) {Week = 3;}if (c.get(Calendar.DAY_OF_WEEK) == 5) {Week = 4;}if (c.get(Calendar.DAY_OF_WEEK) == 6) {Week = 5;}if (c.get(Calendar.DAY_OF_WEEK) == 7) {Week = 6;}return Week;}// 添加需要的动态申请的权限(危险权限才会弹出跳出)static String[] permissions = new String[] { "android.permission.READ_CALENDAR"};/*** 检测权限,然后动态申请未授权的权限* (给 Unity 使用)* @param permissions Unity 传给来的权限字符串*/public static void checkPermissionsForUnity( Activity activity){// 申请权限checkPermissions(activity, permissions);}/*** 动态权限申请,可给Android 自己调用* @param activity* @param MANDATORY_PERMISSIONS*/private static void checkPermissions(Activity activity, String[] MANDATORY_PERMISSIONS) {Log.i(TAG, "checkPermissions: 检测权限");// 判断授权列表List<String> unGrantedPermissions;unGrantedPermissions = new ArrayList();// 检测权限for (String permission : MANDATORY_PERMISSIONS) {Log.i(TAG, "checkPermissions: permission " +permission);if (ContextCompat.checkSelfPermission(activity, permission) != PackageManager.PERMISSION_GRANTED) {unGrantedPermissions.add(permission);}}// 权限请求是否授权if (unGrantedPermissions.size() != 0) {String[] array = new String[unGrantedPermissions.size()];ActivityCompat.requestPermissions(activity, unGrantedPermissions.toArray(array), 0);Log.i(TAG, "checkPermissions: 已经获得了所有权限");}Log.i(TAG, "checkPermissions: Is Over");}}

JavaBean:

public class CalenderDataStruct{public CalenderDataStruct(String eventTitle, String startTime, String endTime, String description, String location, String week) {this.eventTitle = eventTitle;this.startTime = startTime;this.endTime = endTime;this.description = description;this.location = location;this.week = week;}public String eventTitle = "";public String startTime;public String endTime;public String description;public String location;public String week;}

如何使用:

findViewById(R.id.richeng).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (ContextCompat.checkSelfPermission(MainActivity.this, "android.permission.READ_CALENDAR") != PackageManager.PERMISSION_GRANTED) {CalendarUtil.checkPermissionsForUnity(MainActivity.this);}else{ArrayList<CalenderDataStruct> s = CalendarUtil.GetCalenderScheduleFormNow(MainActivity.this,15);Log.i("CalenderDataStruct", new Gson().toJson(s)); }}});

注意!!!

多个重复的事件只会有一条数据,例如创建了一个每天都提醒的事件,获取事件时只会有第一天的数据,其它的时间不会有; 如果你要获取指定几天里面的所有日程事件,请看这里 Android 获取最近几天的日历日程_Choi晨的博客-CSDN博客;

Cursor eventCursor = CalendarContract.Instances.query(context.getContentResolver() , null , currentTime , afterDayTime);

这个方法会获取指定时间段里每天的日程事件;

Android 获取日历日程事件相关推荐

  1. android 获取键盘回车键事件,设置软键盘回车键显示内容,点击空白处隐藏软键盘

    首先设置EditText的回车属性 drawable文件 @drawable/editcolor <?xml version="1.0" encoding="utf ...

  2. android 代码 日历 重复事件设置,日历重复/重复事件 - 最佳存储方法

    对于所有对此感兴趣的人,现在您只需复制并粘贴即可在几分钟内开始使用.我尽可能地在评论中接受了建议.如果我遗失了某些东西,请告诉我. "复杂版本": 事件 + ---------- ...

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

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

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

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

  5. calendar 日历事件 获取最近日程

    文章目录 1.简介 2.目录结构 3.AndroidManifest 文件 4.功能文件 5.log 日志打印 1.简介 获取日历中设置的距离当前最近的日程 2.目录结构 3.AndroidManif ...

  6. Android 获取最近几天的日历日程

    首先获取日历权限 <uses-permission android:name="android.permission.READ_CALENDAR" />  <us ...

  7. android 添加日程失败,Android向系统日历中添加日程事件

    总结 在项目开发中,我们有预约提醒.定时提醒需求时,可以使用系统日历来辅助提醒: 通过向系统日历中写入事件.设置提醒方式(闹钟),实现到时间自动提醒的功能: 好处:由于提醒功能是交付给系统日历来做,不 ...

  8. Android向系统日历中添加日程事件

    总结 在项目开发中,我们有预约提醒.定时提醒需求时,可以使用系统日历来辅助提醒: 通过向系统日历中写入事件.设置提醒方式(闹钟),实现到时间自动提醒的功能: 好处:由于提醒功能是交付给系统日历来做,不 ...

  9. android向系统日历添加日程事件(实现闹铃效果,且在app被杀仍能完成)

    向系统日历读写事件有一下步骤 1,有读写日历的权限 2,如果没有日历账户需要先创建日历账户 3,实现日历事件增删改查,提醒功能 一,权限申请 AndroidManifest.xml添加如下权限 < ...

  10. android日历信息获取错误,flutter对android的日历数据相关操作

    系统日历 三个不同URL的作用 每个url通过contentProvider能获得对应数据库的访问句柄,所以可以理解三个url对应三个数据库,如果通过一个事件关联3个库呢,下面会详细介绍. 数据库介绍 ...

最新文章

  1. Idea项目遇到的错误整理
  2. 使用正则替换文件头注释
  3. 使用Prometheus针对自己的服务器采集自定义的参数
  4. 与JBoss Fuse,Jenkins和Nexus的持续集成
  5. 程序员都长得丑?颜值底线是程序员?
  6. java中集合类的转换_JAVA-常用集合类型转换例子(基础必备)
  7. Ⅴ0还有别的方法设置图案吗_水冷空调扇如何使用 水冷空调扇使用方法介绍【图文】...
  8. 俄罗斯:国家机构今年已遭1000多万起网络攻击
  9. android xml 预览,解决Android studio xml界面无法预览问题
  10. 电机学、电机拖动相关知识(试着更新电机的相关知识,感谢指出错误)
  11. Gantt - attachEvent所有事件(归类、索引)
  12. 【Get Up&Move】MMD镜头+动作打包下载.zip
  13. 最新Permute 3 mac(万能音视频转换器)v3.9.6
  14. 计算机毕业设计的步骤
  15. ovm安装过程及中断处理
  16. 蓝湖怎么切图标注_如何用蓝湖做自动标注 ?
  17. python怎么打开h5文件_Python 操作 HDF5文件
  18. 关于‘云’,你可能要知道的“私有”和“公有”!!!
  19. 求两个整数的较大值(C语言)
  20. Spark排序算法系列之(MLLib、ML)LR使用方式介绍(模型训练、保存、加载、预测)

热门文章

  1. 金蝶商贸版密码服务器没显示,金蝶KIS商贸版无损解密用户密码
  2. H5页面在微信中下载APP的解决办法
  3. Windows 11旗舰版
  4. (十)损失函数与反向传播
  5. python深度学习入门-误差反向传播法
  6. webp图片格式、响应式图片
  7. 支付宝app支付签约开通详解,快速开通支付宝APP支付手机网站支付过风险开通,支付宝App支付签约不通过的解决办法。
  8. 汉字编码与拼音输入法
  9. 基础知识点|命令执行漏洞相关总结
  10. C++ 修改图片格式(后缀)