0

Я пытаюсь вставить событие календаря для 2.2 и 2.3 устройств. Я использую подход Намерения, как описано здесь:Как добавить событие календаря с использованием намерений?

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

Он работал на 4.1 устройства.

Но мне нужно это совместимо с устройствами 2.2 +, так что я переработан приложение, чтобы избавиться от CalendarContract.CONTENT_URI, так что она может работать в версиях < 14.

Я теперь с помощью этого Ури, который AFAIK совместим с тех пор Froyo:

content://com.android.calendar 

Но я всегда иметь это исключение в Froyo и Gingerbread устройств:

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.INSERT dat=content://com.android.calendar/events (has extras) } 

Эти намерения также не:

Intent { act=android.intent.action.VIEW dat=content://com.android.calendar/time/1386926751452 } 

    Intent { act=android.intent.action.INSERT dat=content://com.android.calendar/events (has extras) } 

    Intent { act=android.intent.action.EDIT dat=content://com.android.calendar/events (has extras) } 

Я, тем не менее пытался предыдущее содержимое Uri (содержание: // календарь), даже зная, что это за 1,5 и 1,6 с одинаковым результатом.

Не нужно говорить Я проверил, что календарь установлен на каждом устройстве, которое я использовал для тестирования.

Я что-то упустил?

+0

у вас есть исключения на устройствах или симуляторах? –

+0

@MarcinOrlowski На обоих –

ответ

1

Я нашел решение в this answer.

Поставщик контента Uri работает только для API 14. Для предыдущих версий операционной системы, цель не должна иметь набор Uri данных, а не требуется календарь приложение MIME тип:

Intent intent = new Intent(Intent.ACTION_EDIT); 
    if (Build.VERSION.SDK_INT >= 14) { 
     intent.setData("content://com.android.calendar/events"); 
    } else { 
     intent.setType("vnd.android.cursor.item/event"); 
    } 

Удивительно, но намерение только за открытие календаря работает с контент-провайдером Uri (без " событий "). Оказывается, что этот код работает с Froyo на новые ICS устройств:

Uri.Builder builder = Uri.parse("content://com.android.calendar").buildUpon(); 
    builder.appendPath("time"); 
    ContentUris.appendId(builder, System.currentTimeMillis()); 
    Intent intent = new Intent(Intent.ACTION_VIEW).setData(builder.build()); 

    startActivity(intent); 

Я думаю, что пришло время для парней в Google, чтобы выкатить какую-то библиотеку совместимости для календаря. Было бы неплохо иметь возможность запускать идеи (и даже получать доступ к ContentProvider), не заботясь о той версии ОС, с которой мы работаем. Да, я знаю, что тип MIME не является официальным, и база данных изменилась, и поэтому она может не работать на некоторых устройствах. Но некоторая поддержка старых устройств лучше, чем поддержка NO.

+0

Это очень помогло мне. Спасибо, что опубликовали ваше решение. Я использовал EventKit на стороне iOS, и он отлично работал. Желание Android реализовать что-то подобное. – Alex

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