h***@126.com
h***@126.com
  • 发布:2019-05-14 14:03
  • 更新:2021-05-31 15:32
  • 阅读:2229

分享一个Andorid手机插入一个日程事件

分类:Native.js

实现功能:

  1. 建立自己的账户,每次插入日历都使用自己的账户,区分第三方日历账户与系统日历账户
  2. 实现建立的日历删除
  3. 实现2次闹钟提醒,(addcalendar中的参数 fr, tr的值必须为分钟数字,比如:你的闹钟设置是1个小时提醒,输入的参数必须是60)

mui.plusReady(function() {
if(mui.os.ios) {

            } else {  
                var calanderURL = 'content://com.android.calendar/calendars',  
                    eventsURL = 'content://com.android.calendar/events',  
                    ContentValues = plus.android.importClass("android.content.ContentValues"),  
                    Uri = plus.android.importClass('android.net.Uri'),  
                    ContentUris = plus.android.importClass('android.content.ContentUris'),  
                    Calendar = plus.android.importClass('java.util.Calendar'),  
                    main = plus.android.runtimeMainActivity(),  
                    userCursor = plus.android.invoke(main.getContentResolver(), 'query', Uri.parse(calanderURL), null, null, null, null),  
                    userCursor_count = plus.android.invoke(userCursor, 'getCount'),  
                    TimeZone = plus.android.importClass('java.util.TimeZone'),  
                    TimeZone_str = plus.android.invoke(TimeZone.getDefault(), 'getID');  
            }  
                             //Nid参数为数据库中的一个id,可以不用,我用这个Nid实现与手机系统的日历事件id进行关联  
            addcalendar = function(Nid, title, description, date_str, etime, fr, tr) {  
                if(userCursor_count <= 0) { //如果没有日历账户   
                    addcalendaraccount();   
                    userCursor = plus.android.invoke(main.getContentResolver(), 'query', Uri.parse(calanderURL), null, null, null, null);  
                    userCursor_count++;  
                }    
                plus.android.invoke(userCursor, 'moveToFirst');//第一个  
                //plus.android.invoke(userCursor, 'moveToLast');//最后一个  
                //plus.android.invoke(userCursor, 'moveToNext');//下一个  
                for(var i = 0; i < userCursor_count; i++) {  
                    var calName = plus.android.invoke(userCursor, 'getString', plus.android.invoke(userCursor, 'getColumnIndex', 'calendar_displayName'));  
                    //获得日历的描述名称  
                    if(calName == "OA日历") {  
                        break;  
                    }  
                    if(i == (userCursor_count - 1)) {  
                        addcalendaraccount();   
                        userCursor = plus.android.invoke(main.getContentResolver(), 'query', Uri.parse(calanderURL), null, null, null, null);  
                        userCursor_count++;  
                    }  
                    plus.android.invoke(userCursor, 'moveToNext');  
                }  

                try {  
                    var calId = plus.android.invoke(userCursor, 'getString', plus.android.invoke(userCursor, 'getColumnIndex', '_id')),  
                        events = new ContentValues(),  
                        mCalendar = Calendar.getInstance(),  
                        date = date_str.split(/\s{1}|:|-/g);  
                    plus.android.invoke(mCalendar, 'set', Calendar.YEAR, ~~date[0]);  
                    plus.android.invoke(mCalendar, 'set', Calendar.MONTH, ((~~date[1]) - 1));  
                    plus.android.invoke(mCalendar, 'set', Calendar.DATE, ~~date[2]);  
                    plus.android.invoke(mCalendar, 'set', Calendar.HOUR_OF_DAY, ~~date[3]);  
                    plus.android.invoke(mCalendar, 'set', Calendar.MINUTE, ~~date[4]);  
                    var start = plus.android.invoke(plus.android.invoke(mCalendar, 'getTime'), 'getTime');  
                    //设置日历事件   
                    var etimestamp = new Date(etime.replace(/-/g, "\/")).getTime();//时间可以用传入参数的模式  
                    events.put('title', title);  
                    events.put('description', description);  
                    events.put('calendar_id', calId);  
                    events.put('dtstart', start);  
                    events.put('dtend', etimestamp);  
                    //events.put('ALL_DAY', 0); //值为 1 表示此事件占用一整天(按照本地时区的定义)。 值为 0 表示它是常规事件,可在一天内的任何时间开始和结束。  
                    //events.put('RRULE')  
                    events.put('hasAlarm', 1);  
                    events.put('eventTimezone', TimeZone_str);  
                    var newEvent = plus.android.invoke(main.getContentResolver(), 'insert', Uri.parse('content://com.android.calendar/events'), events);  
                    var id = plus.android.invoke(newEvent, 'getLastPathSegment');  
                    if(fr.length > 0) {  
                        var values = new ContentValues();  
                        values.put('event_id', id);  
                        values.put('minutes', fr);  
                        values.put('method', '1');  
                        plus.android.invoke(main.getContentResolver(), 'insert', Uri.parse('content://com.android.calendar/reminders'), values);  
                    }  
                    if(tr.length > 0) {  
                        var values2 = new ContentValues();  
                        values2.put('event_id', id);  
                        values2.put('minutes', tr);  
                        values2.put('method', '1');  
                        plus.android.invoke(main.getContentResolver(), 'insert', Uri.parse('content://com.android.calendar/reminders'), values2);  
                    }   
                    //SaveCalendID(id, Nid, callSetProRmData); 把插入日历的id保存起来,便于删除调用  
                    //也可以用于更新(先删后插入);  
                } catch(e) {   
                        mui.alert("您没有允许APP访问日历的权限");   
                }  
            }  

            deletecalendar = function(eventID) {  
                if(userCursor_count <= 0) { //如果没有日历账户  
                    addcalendaraccount();  
                }  
                var id = Number(eventID);  
                //alert(id);  
                var deleteUri = ContentUris.withAppendedId(Uri.parse(eventsURL), id);  
                var rows = plus.android.invoke(main.getContentResolver(), "delete", deleteUri, null, null);  
                if(rows == -1) {   
                    return;  
                }   
            }  

            addcalendaraccount = function() {  
                var account = new ContentValues(),  
                    buildUpon = plus.android.invoke(Uri.parse(calanderURL), 'buildUpon'),  
                    CalendarContract = plus.android.importClass('android.provider.CalendarContract');  
                plus.android.invoke(buildUpon, 'appendQueryParameter', CalendarContract.CALLER_IS_SYNCADAPTER, 'true');  
                plus.android.invoke(buildUpon, 'appendQueryParameter', 'account_name', 'OA@xxx.com.com');  
                plus.android.invoke(buildUpon, 'appendQueryParameter', 'account_type', 'com.android.exchange');  
                //设置账户信息  
                account.put('name', 'OAAppAdmin');  
                account.put('account_name', 'OA@xxx.com.com');  
                account.put('account_type', 'com.android.exchange');  
                account.put('calendar_displayName', 'OA日历');  
                account.put('visible', 1);  
                account.put('calendar_color', '-9206951');  
                account.put('calendar_access_level', '700');  
                account.put('sync_events', 1);  
                account.put('calendar_timezone', TimeZone_str);  
                account.put('ownerAccount', 'OA@xxx.com.com');  
                account.put('canOrganizerRespond', 0);  
                //保存账户信息  
                plus.android.invoke(main.getContentResolver(), 'insert', plus.android.invoke(buildUpon, 'build'), account);  
            }   
        });
0 关注 分享

要回复文章请先登录注册

FullStack

FullStack

日历、提醒事项 添加日程和提醒(ios):[https://ext.dcloud.net.cn/plugin?id=5203](https://ext.dcloud.net.cn/plugin?id=5203)
2021-05-31 15:32
l***@chinaunicom.cn

l***@chinaunicom.cn

回复 h***@126.com :
请问这个怎么调用呀?
2020-07-09 15:08
h***@126.com

h***@126.com (作者)

不知道顶上是怎么搞的,代码出去了,我复制的是整个mui.plusReady的方法
2019-05-14 14:05