您的位置:首页 > 移动开发 > Android开发

安卓日历日程事件获取和监听汇总

2017-02-17 15:52 1466 查看
在我们的APP开发过程中,很多时候我们需要获取用户的日历日程事件,便于我们APP更好的了解用户,同时给予用户提醒。

要想获得日历日程的相关内容,首先我们需要拥有日历日程的读写权限。主要包括下面两个权限

获得对安卓系统日历事件操作的权限,也就是在AndroidManifest.xml文件中加入如下两行
·  <uses-permission Android:name="android.permission.READ_CALENDAR"/>   
·  <uses-permission android:name="android.permission.WRITE_CALENDAR"/> 
字面意思很明确就是分别的读写权限,类同于对短信的权限获取
安卓中日历用到三个URL,分别是日历用户的URL,事件的URL,以及事件提醒的URL,三个URL在安卓版本2.2前后分别是:

 if(Integer.parseInt(Build.VERSION.SDK)>=8){
      uri = "content://com.android.calendar/calendars";
     eventUri = "content://com.android.calendar/events";
      reminderUri = "content://com.android.calendar/reminders";
}
else{   //在安卓2.2版本以后的地址
 
calanderURL= "content://calendar/calendars";
 
calanderEventURL= "content://calendar/events"; 
  reminderUri = "content://calendar/reminders";
}
之后我们通过内容解析者分别对这三个url内容进行查询

Cursor userCursor = getContentResolver().query(Uri.parse(calanderURL), null,   

                    null, null, null);  

            if(userCursor.getCount() > 0){  

                userCursor.moveToFirst();    // 将游标移动到首位

                String userName = userCursor.getString(userCursor.getColumnIndex("name"));
//拿到当前日历用户

             

            }   

            Cursor eventCursor = getContentResolver().query(Uri.parse(calanderEventURL), null,
 

                    null, null, null);  

            if(eventCursor.getCount() > 0){  

                eventCursor.moveToLast();              

                String eventTitle = eventCursor.getString(eventCursor.getColumnIndex("title"));
 

            }  

            //获取要出入的gmail账户的id  

            String calId = "";  

            Cursor userCursor = getContentResolver().query(Uri.parse(calanderURL), null,   

                    null, null, null);  

            if(userCursor.getCount() > 0){  

                userCursor.moveToFirst();  

                calId = userCursor.getString(userCursor.getColumnIndex("_id"));  

                  

            }  

            ContentValues event = new ContentValues();
       // 新建日历事件

            event.put("title", "明天上午八点考试");  

            event.put("description", "明天上午在第二教学楼有英语专业的考试");  

            //插入插入用户

            event.put("calendar_id",calId);  

              

            Calendar mCalendar = Calendar.getInstance();  

            mCalendar.set(Calendar.HOUR_OF_DAY,10);  

            long start = mCalendar.getTime().getTime();  

            mCalendar.set(Calendar.HOUR_OF_DAY,11);  

            long end = mCalendar.getTime().getTime();  

             // 分别设置开始时间和结束时间

            event.put("dtstart", start);  

            event.put("dtend", end);  

            event.put("hasAlarm",1);  

              
                    //将事件插入到日历中

            Uri newEvent = getContentResolver().insert(Uri.parse(calanderEventURL), event);  

            long id = Long.parseLong( newEvent.getLastPathSegment() );  

            ContentValues values = new ContentValues();  

            values.put( "event_id", id );  

            //提前10分钟有提醒  

            values.put( "minutes", 10 );  

            getContentResolver().insert(Uri.parse(calanderRemiderURL), values);  

            

        }  

    }  
public class CalendarObserver extends ContentObserver {

        private Context context;
        private Handler handler;
        
        public CalendarObserver(Context context,Handler handler) {
                super(handler);
                // TODO Auto-generated constructor stub
                this.context=context;
                this.handler=handler;
        }

        @Override
        public void onChange(boolean selfChange) {
                // TODO Auto-generated method stub
                super.onChange(selfChange);
                handler.obtainMessage(3,"events have chage").sendToTarget();
        }
在主类中,实例化并实施监听
                calObserver=new CalendarObserver(this,new Handler(){

                @Override
                public void handleMessage(Message msg) {
                        /**当监听到改变时,做业务操作*/
                        Log.i("tag", "now ");
                        String msgStr=(String)msg.obj;
                                System.out.println(msgStr+"----------------日程日程");
                                Toast.makeText(CalendarActivity.this, "日程事件修改被触发", Toast.LENGTH_SHORT).show();
                }        
        };
                //注册日程事件监听
                getContentResolver().registerContentObserver(Events.CONTENT_URI, true, calObserver);

}

以下是日历事件的增删该差的具体demo http://blog.csdn.net/justforhappness/article/details/40432663
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android 安卓 日历 日程