Android 获取日历日程事件
注意!!!
多个重复的事件只会有一条数据,例如创建了一个每天都提醒的事件,获取事件时只会有第一天的数据,其它的时间不会有; 如果你要获取指定几天里面的所有日程事件,请看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 获取日历日程事件相关推荐
- android 获取键盘回车键事件,设置软键盘回车键显示内容,点击空白处隐藏软键盘
首先设置EditText的回车属性 drawable文件 @drawable/editcolor <?xml version="1.0" encoding="utf ...
- android 代码 日历 重复事件设置,日历重复/重复事件 - 最佳存储方法
对于所有对此感兴趣的人,现在您只需复制并粘贴即可在几分钟内开始使用.我尽可能地在评论中接受了建议.如果我遗失了某些东西,请告诉我. "复杂版本": 事件 + ---------- ...
- 日历 android 周历,Android Studio 基础 之 获取系统Calendar 日历日程 (涉及指定日期时间判断是星期几的方法使用)的方法整理...
Android Studio 基础 之 获取系统Calendar 日历日程 (涉及指定日期时间判断是星期几的方法使用)的方法整理 目录 Android Studio 基础 之 获取系统Calendar ...
- Android Studio 基础 之 获取系统Calendar 日历日程(可获得当天以后可设定天数范围内的日历日程) (涉及指定日期时间判断是星期几的方法使用)的方法整理
Android Studio 基础 之 获取系统Calendar 日历日程(可获得当天以后可设定天数范围内的日历日程) (涉及指定日期时间判断是星期几的方法使用)的方法整理 目录 Android St ...
- calendar 日历事件 获取最近日程
文章目录 1.简介 2.目录结构 3.AndroidManifest 文件 4.功能文件 5.log 日志打印 1.简介 获取日历中设置的距离当前最近的日程 2.目录结构 3.AndroidManif ...
- Android 获取最近几天的日历日程
首先获取日历权限 <uses-permission android:name="android.permission.READ_CALENDAR" /> <us ...
- android 添加日程失败,Android向系统日历中添加日程事件
总结 在项目开发中,我们有预约提醒.定时提醒需求时,可以使用系统日历来辅助提醒: 通过向系统日历中写入事件.设置提醒方式(闹钟),实现到时间自动提醒的功能: 好处:由于提醒功能是交付给系统日历来做,不 ...
- Android向系统日历中添加日程事件
总结 在项目开发中,我们有预约提醒.定时提醒需求时,可以使用系统日历来辅助提醒: 通过向系统日历中写入事件.设置提醒方式(闹钟),实现到时间自动提醒的功能: 好处:由于提醒功能是交付给系统日历来做,不 ...
- android向系统日历添加日程事件(实现闹铃效果,且在app被杀仍能完成)
向系统日历读写事件有一下步骤 1,有读写日历的权限 2,如果没有日历账户需要先创建日历账户 3,实现日历事件增删改查,提醒功能 一,权限申请 AndroidManifest.xml添加如下权限 < ...
- android日历信息获取错误,flutter对android的日历数据相关操作
系统日历 三个不同URL的作用 每个url通过contentProvider能获得对应数据库的访问句柄,所以可以理解三个url对应三个数据库,如果通过一个事件关联3个库呢,下面会详细介绍. 数据库介绍 ...
最新文章
- Idea项目遇到的错误整理
- 使用正则替换文件头注释
- 使用Prometheus针对自己的服务器采集自定义的参数
- 与JBoss Fuse,Jenkins和Nexus的持续集成
- 程序员都长得丑?颜值底线是程序员?
- java中集合类的转换_JAVA-常用集合类型转换例子(基础必备)
- Ⅴ0还有别的方法设置图案吗_水冷空调扇如何使用 水冷空调扇使用方法介绍【图文】...
- 俄罗斯:国家机构今年已遭1000多万起网络攻击
- android xml 预览,解决Android studio xml界面无法预览问题
- 电机学、电机拖动相关知识(试着更新电机的相关知识,感谢指出错误)
- Gantt - attachEvent所有事件(归类、索引)
- 【Get Up&Move】MMD镜头+动作打包下载.zip
- 最新Permute 3 mac(万能音视频转换器)v3.9.6
- 计算机毕业设计的步骤
- ovm安装过程及中断处理
- 蓝湖怎么切图标注_如何用蓝湖做自动标注 ?
- python怎么打开h5文件_Python 操作 HDF5文件
- 关于‘云’,你可能要知道的“私有”和“公有”!!!
- 求两个整数的较大值(C语言)
- Spark排序算法系列之(MLLib、ML)LR使用方式介绍(模型训练、保存、加载、预测)