简体   繁体   English

如何在Android模拟器中创建日历事件。

[英]How to create a calendar event in android emulator.

I am trying to add calendar events to my custom account.. 我正在尝试将日历事件添加到我的自定义帐户中。

I have successfully created a calendar event using following code, 我已使用以下代码成功创建了一个日历事件,

    private static long addCalendar(Account account) throws RemoteException, OperationApplicationException {


Uri calenderUri = Calendars.CONTENT_URI.buildUpon().appendQueryParameter(Calendars.ACCOUNT_NAME, account.name).appendQueryParameter(
Calendars.ACCOUNT_TYPE, account.type).build();
Cursor c1 = mContentResolver.query(calenderUri, new String[] { BaseColumns._ID }, null,    null, null);
if (c1.moveToNext()) {
return c1.getLong(0);
} else {
ArrayList<ContentProviderOperation> operationList = new ArrayList<ContentProviderOperation>();

 ContentProviderOperation.Builder builder = ContentProviderOperation.newInsert(Calendars.CONTENT_URI.buildUpon()
.appendQueryParameter(CalendarContract.CALLER_IS_SYNCADAPTER, "true")
.appendQueryParameter(Calendars.ACCOUNT_NAME, account.name)
.appendQueryParameter(Calendars.ACCOUNT_TYPE, account.type)

.build()
);
builder.withValue(Calendars.ACCOUNT_NAME, account.name);
builder.withValue(Calendars.ACCOUNT_TYPE, account.type);
builder.withValue(Calendars.NAME, "com.example.karthi");
builder.withValue(Calendars.CALENDAR_DISPLAY_NAME, "com.example.karthi");
builder.withValue(Calendars.CALENDAR_COLOR, 0xD51007);
builder.withValue(Calendars.CALENDAR_ACCESS_LEVEL, Calendars.CAL_ACCESS_READ);
builder.withValue(Calendars.OWNER_ACCOUNT, account.name);
builder.withValue(Calendars.VISIBLE, 1);
builder.withValue(Calendars.SYNC_EVENTS, 1);
operationList.add(builder.build());
try {
mContentResolver.applyBatch(CalendarContract.AUTHORITY, operationList);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return -1;
}
return addCalendar(account);
}
}
@SuppressLint("SimpleDateFormat")
public static void addEvent(Long id,Account account,String sid,String eventName,String s_date,String duration,String responsible) throws RemoteException, OperationApplicationException, ParseException{




        ArrayList<ContentProviderOperation> operationList = new ArrayList<ContentProviderOperation>();

        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US);
        Date begin_date = format.parse(String.valueOf(s_date));
       long beginDate = begin_date.getTime();
        long endDate = beginDate + (Double.valueOf(duration).intValue() * HOUR);

     //Insert a new event

            Log.d("add event"+calendarID,"area");
            Log.d("event area","calendar id="+id);
            TimeZone timeZone = TimeZone.getDefault();

            ContentProviderOperation.Builder builder = ContentProviderOperation.newInsert(Events.CONTENT_URI.buildUpon()
                    .appendQueryParameter(Calendars.ACCOUNT_NAME, account.name)
                    .appendQueryParameter(Calendars.ACCOUNT_TYPE, account.type)
                    .appendQueryParameter(CalendarContract.CALLER_IS_SYNCADAPTER, "true")
                    .build()
                    ); 
            builder.withValue(CalendarContract.Events.CALENDAR_ID, id);
            builder.withValue(CalendarContract.Events.DTSTART, beginDate);
            builder.withValue(CalendarContract.Events.DTEND, endDate);

            builder.withValue(CalendarContract.Events.EVENT_TIMEZONE, timeZone.getID());
            builder.withValue(CalendarContract.Events.TITLE, eventName);
            operationList.add(builder.build());
            mContentResolver.applyBatch(CalendarContract.AUTHORITY, operationList);

               ContentProviderResult[] res = mContentResolver.applyBatch(CalendarContract.AUTHORITY, operationList);

                Uri myContactUri = res[0].uri;
                int lastSlash = myContactUri.toString().lastIndexOf("/");
                int length = myContactUri.toString().length();
                String event_id =(String) myContactUri.toString().subSequence(lastSlash+1, length);

                s_date=String.valueOf(beginDate);
               String  e_date=String.valueOf(endDate);
            DBAdapter.addEventsData(sid, eventName, s_date, e_date, responsible, event_id);


}

My account show in settings -> Calendars to display area... above code also create an event for my custom account.. This code work fine. 我的帐户显示在设置->日历显示区域中...上面的代码还为我的自定义帐户创建了一个事件。

But I want to add a event in android emulator it give following error, 但是我想在android模拟器中添加一个事件,它给出以下错误, 在此处输入图片说明

I also try Add account option. 我也尝试添加帐户选项。 If I press Add account it allow to create my custom account. 如果我按添加帐户,则允许创建我的自定义帐户。

and again try to create an event from android emulator. 并再次尝试从android模拟器创建事件。 again it show No calendars message.. any help or commands welcome... 再次显示无日历消息..任何帮助或命令欢迎...

Note: I don`t want programatically add events,It already created from above code 注意:我不想以编程方式添加事件,它已经从上面的代码创建

Finally I found the solution. 终于我找到了解决方案。 Its my mistake. 这是我的错误。 I give access level only READ . 我只给访问级别READ

builder.withValue(Calendars.CALENDAR_ACCESS_LEVEL,Calendars.CAL_ACCESS_READ);

after change this line to, 将此行更改为

builder.withValue(Calendars.CALENDAR_ACCESS_LEVEL,Calendars.CAL_ACCESS_OWNER);

Now its working fine. 现在它的工作正常。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM