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

在我们的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内容进行查询

  1. Cursor userCursor = getContentResolver().query(Uri.parse(calanderURL), null,   
  2.                     nullnullnull);  
  3.             if(userCursor.getCount() > 0){  
  4.                 userCursor.moveToFirst();    // 将游标移动到首位
  5.                 String userName = userCursor.getString(userCursor.getColumnIndex("name")); //拿到当前日历用户
  6.              
  7.             }   
  8.             Cursor eventCursor = getContentResolver().query(Uri.parse(calanderEventURL), null,  
  9.                     nullnullnull);  
  10.             if(eventCursor.getCount() > 0){  
  11.                 eventCursor.moveToLast();              
  12.                 String eventTitle = eventCursor.getString(eventCursor.getColumnIndex("title"));  
  13.             }  
  14.             //获取要出入的gmail账户的id  
  15.             String calId = "";  
  16.             Cursor userCursor = getContentResolver().query(Uri.parse(calanderURL), null,   
  17.                     nullnullnull);  
  18.             if(userCursor.getCount() > 0){  
  19.                 userCursor.moveToFirst();  
  20.                 calId = userCursor.getString(userCursor.getColumnIndex("_id"));  
  21.                   
  22.             }  
  23.             ContentValues event = new ContentValues();        // 新建日历事件
  24.             event.put("title""明天上午八点考试");  
  25.             event.put("description""明天上午在第二教学楼有英语专业的考试");  
  26.             //插入插入用户
  27.             event.put("calendar_id",calId);  
  28.               
  29.             Calendar mCalendar = Calendar.getInstance();  
  30.             mCalendar.set(Calendar.HOUR_OF_DAY,10);  
  31.             long start = mCalendar.getTime().getTime();  
  32.             mCalendar.set(Calendar.HOUR_OF_DAY,11);  
  33.             long end = mCalendar.getTime().getTime();  
  34.              // 分别设置开始时间和结束时间
  35.             event.put("dtstart", start);  
  36.             event.put("dtend", end);  
  37.             event.put("hasAlarm",1);  
  38.               
                    //将事件插入到日历中
  1.             Uri newEvent = getContentResolver().insert(Uri.parse(calanderEventURL), event);  
  2.             long id = Long.parseLong( newEvent.getLastPathSegment() );  
  3.             ContentValues values = new ContentValues();  
  4.             values.put( "event_id", id );  
  5.             //提前10分钟有提醒  
  6.             values.put( "minutes"10 );  
  7.             getContentResolver().insert(Uri.parse(calanderRemiderURL), values);  
  8.             
  9.         }  
  10.     }  
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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值