Мероприятие не добавляется в Календарь на некоторых телефонах Android

Я использую приведенный ниже код для добавления событий в календарь на Android.

public void addEvent(String datetime) { 
        String eventdate;
        {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd HH:mm");
        final Calendar cal = Calendar.getInstance();
        try {

            cal.setTime(formatter.parse(datetime));
            eventdate = cal.get(Calendar.YEAR)+"/"+cal.get(Calendar.MONTH)+"/"+cal.get(Calendar.DAY_OF_MONTH)+" "+cal.get(Calendar.HOUR_OF_DAY)+":"+cal.get(Calendar.MINUTE);
            //Log.e("Event date ", eventdate);
        } catch (Exception e) {
            Log.e("Catch ", "",e);
        }
        ContentValues event = new ContentValues();
        event.put("calendar_id", 3);
        event.put("_id", eventid);
        event.put("title", mytitle);
        event.put("description", mydescription);
        event.put("eventTimezone", TimeZone.getDefault().getID());
        event.put("dtstart", cal.getTimeInMillis());
        event.put("dtend", cal.getTimeInMillis()+60*60*1000);
        event.put("hasAlarm", 1); // 0 for false, 1 for true

        String eventUriString = "content://com.android.calendar/events";

        Uri eventUri = getApplicationContext()
        .getContentResolver()
        .insert(Uri.parse(eventUriString), event);

        System.out.println("event"+eventUri);
    }

следующий код добавляет событие в мой телефон HTC, работающий под управлением Android Lollipop, но он возвращает null на таких телефонах, как Micromax и Samsung, работающих под управлением Android Jellybean. В чем может быть причина такого поведения? Мне нужно что-нибудь включать в настройках?


person karan    schedule 17.08.2015    source источник
comment
Проверьте, подходит ли этот URI-код: //com.android.calendar/events для этих устройств.   -  person JanithaR    schedule 17.08.2015
comment
используйте Events.CONTENT_URI вместо вашего uri   -  person Emil    schedule 17.08.2015
comment
@JanithaR да, это правильно, я могу получить календарь, используя его   -  person karan    schedule 17.08.2015


Ответы (1)


попробуйте использовать константы, предоставленные классом Events.

ContentResolver cr = yourContext.getContentResolver();
ContentValues event = new ContentValues();
event.put(Events.DTSTART,  cal.getTimeInMillis());
event.put(Events.DTEND, cal.getTimeInMillis() + 60 * 60 * 1000);
event.put(Events.TITLE, mytitle);
event.put(Events.DESCRIPTION, mydescription);
event.put(Events.CALENDAR_ID, calID);
event.put(Events.EVENT_TIMEZONE, TimeZone.getDefault().getID());
...
Uri uri = cr.insert(Events.CONTENT_URI, event);

Идентификатор этого вставленного события можно получить из этого метода.

long eventID = Long.parseLong(uri.getLastPathSegment());

Проверьте заголовок Добавление событий в Поставщик календаря http://developer.android.com/guide/topics/providers/calendar-provider.html

Если вы хотите вставить _id в событие, вы должны проверить, есть ли он там.

Uri event = ContentUris.withAppendedId(Events.CONTENT_URI, _id);
Cursor cursor = managedQuery(event, null, null, null);
if (cursor.getCount() == 1) {
  //the event exists.. so may be you want to update it
} else {
  // you can insert your id
}
person Emil    schedule 17.08.2015
comment
разве мне не нужно добавлять идентификатор календаря - person karan; 17.08.2015
comment
хорошо, это может быть проблемой? тогда это не будет добавлено в календарь, я думаю - person karan; 17.08.2015
comment
хороший код, я пытаюсь его использовать. спасибо за идею - person karan; 17.08.2015