2011-12-21 3 views
4

Когда я разрабатывал APP, API которого был 7 на моем Nexus S, не было никаких проблем при создании нового события в моем календаре.Какое местоположение календаря в Android 4.0?

Я использовал этот код, чтобы получить расположение календарей на моем телефоне:

cursor = cr.query(Uri.parse("content://com.android.calendar/calendars"), new String[]{ "_id", "displayname" }, null, null, null); 

Проблема возникла, когда я обновил свой Nexus S с Android ICS 4.0. Без изменения кода я получил ошибку. На LogCat я не мог читать:

  • нет такой колонки: DISPLAYNAME, дб =/данные/данные/com.android.providers.calendar/Базы данных/calendar.db

конечно же курсора ноль. Возможно, какие-либо изменения в базе данных календаря? Итак, я хотел бы знать, как я могу создавать новые события календаря разработки приложения API 7 на Андроид 4,0

Спасибо;)

ответ

3

Календарь Provider является новым для Android 4.0, так что вы можете просмотреть документация:

http://developer.android.com/guide/topics/providers/calendar-provider.html

Для версий до Froyo, я знаю, что календарь был расположен на content://calendar/calendars, но это с тех пор изменилось.

+0

Исправлено: вы были правы. Спасибо;) Я собираюсь написать свой код, чтобы добавить событие в конкретный календарь. Дело в том, что имена столбцов в таблице календаря изменились. – ElChencho

+0

Рад помочь любым возможным способом. –

5

В Android 4.0 календарь находится в том же Uri, что и в Android 2.3. Поэтому я присоединяю свой код, если у других людей такая же проблема.

public void addToCalendar(Context ctx, final String title, final String comment, final long dtstart, final long dtend) { 


    final ContentResolver cr = ctx.getContentResolver(); 
    Cursor cursor ; 

    cursor = cr.query(Uri.parse("content://com.android.calendar/calendars"), new String[]{ "_id","calendar_displayName" }, null, null, null); 

    /*if (Integer.parseInt(Build.VERSION.SDK) == 8) 
     cursor = cr.query(Uri.parse("content://com.android.calendar/calendars"), new String[]{ "_id", "displayname" }, null, null, null); 
    */ 

    //Get all the calendar ids and name available in the phone 
    if (cursor.moveToFirst()) { 
     final String[] calNames = new String[cursor.getCount()]; 
     final int[] calIds = new int[cursor.getCount()]; 
     for (int i = 0; i < calNames.length; i++) { 
      calIds[i] = cursor.getInt(0); 
      calNames[i] = cursor.getString(1); 
      cursor.moveToNext(); 
     } 

     //Creation of a new event in calendar whose position is 0 on the phone 
     ContentValues cv = new ContentValues(); 
     cv.put("calendar_id", calIds[0]); 
     cv.put("title", title); 
     cv.put("dtstart", dtstart); 
     cv.put("dtend", dtend); 
     cv.put("eventTimezone","Spain"); 
     cv.put("description", comment); 

     //Insertion on the events of the calendar 
     cr.insert(Uri.parse("content://com.android.calendar/events"), cv); 

     /*Uri newEvent ; 
     if (Integer.parseInt(Build.VERSION.SDK) == 8) 
      newEvent = cr.insert(Uri.parse("content://com.android.calendar/events"), cv); 
     */ 

     finish(); 

    } 
    cursor.close(); 

} 

У вас есть все данные в: http://developer.android.com/guide/topics/providers/calendar-provider.html, как сказал Джон раньше.

Смежные вопросы