Какое расположение календаря в Android 4.0? - PullRequest
4 голосов
/ 21 декабря 2011

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

Я использовал этот код для определения местоположения календарей на своем календаре.телефон:

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, db = / data / data / com.android.providers.calendar / database / calendar.db

Конечно, курсор нулевой.Может быть, какие-либо изменения в базе данных календаря?Итак, я хотел бы знать, как я могу создавать новые события календаря, разрабатывая приложение API 7 на Android 4.0

Спасибо;)

Ответы [ 2 ]

5 голосов
/ 22 декабря 2011

В 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, как сказал Джон ранее.

3 голосов
/ 21 декабря 2011

Поставщик календарей является новым для Android 4.0, поэтому вы можете просмотреть документацию:

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

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

...