Настройка календаря Android - PullRequest
1 голос
/ 11 марта 2012

Я делаю серверную функцию для другой области программы, которая будет добавлять события в календарь пользователя.По сути, кто-то выберет событие из опций в графическом интерфейсе, и я хочу установить событие в календаре, которое соответствует выбору.Код, чтобы прояснить, с чем я работаю:

    java.sql.Timestamp tsStart = java.sql.Timestamp.valueOf(year + "-" + month + "-" + day + " " + startHour + ":" + startMinute + ":00");
    java.sql.Timestamp tsEnd = java.sql.Timestamp.valueOf(year + "-" + month + "-" + day + " " + endHour + ":" + endMinute + ":00");        

    long startTime = tsStart.getTime();
    long endTime = tsEnd.getTime();

    Intent intent = new Intent(Intent.ACTION_EDIT);
    intent.setType("vnd.android.cursor.item/event");        
    intent.putExtra("beginTime", startTime);     
    intent.putExtra("allDay", false);
    intent.putExtra("rrule", "FREQ=WEEKLY;COUNT="+numWeeks);
    intent.putExtra("endTime", endTime);
    intent.putExtra("title", title);
    intent.putExtra("description", description);
    intent.putExtra("eventLocation", location);
    startActivity(intent);

Я использовал намерение сделать это, но есть несколько дополнений, которые я бы предпочел не иметь: 1Когда намерение запускается, оно начинается в текстовой записи для поля «Что».Я автоматически заполнил все эти поля, поэтому пользователю не нужно ничего делать, и когда он запускается таким образом, клавиатура занимает много места и выглядит грязно.Есть ли способ, которым я могу либо установить фокус, чтобы его не было в текстовом поле, либо подделать нажатие кнопки назад?2. Можно ли сделать так, чтобы некоторые разделы намерения не показывались?Я не думаю, что нужно спрашивать часовой пояс, не нужно проверять весь день (потому что я говорю время начала и окончания), не нуждаюсь в гостях, лучше скрыть повторение, потому что оно настроено и может запутатьконечный пользователь видит, и я не хочу напоминания, которые он автоматически делает один на 10 минут.-> Можно ли скрыть какие-либо / все эти предметы?3. Можно ли даже сделать так, чтобы это никогда не отображалось пользователю?Мне нравится тот факт, что он позволяет пользователю выбирать, какой календарь использовать, но я согласен с его использованием по умолчанию, поскольку большинство людей связывают свой телефон с другими учетными записями, а календарь на телефоне - моя главная задача.Если бы я мог убрать 10-минутное напоминание, я бы просто сделал так, чтобы оно никогда не отображалось пользователю, и просто заполнял его календарь, как я говорю.

Спасибо всем, кто может оказать любую помощь.Я перечитывал намерения, календари и все, что мог придумать у разработчиков Android, и наткнулся на стену, где я не могу найти эти ответы.Что напоминает мне, есть ли список где-нибудь из всех действующих putExtra?Страница разработчиков Android была хороша для перечисления всех методов и т. Д., Но кроме нахождения некоторых примеров, я не знаю, что все, что я могу указать в качестве допустимых аргументов внутри putExtra.

1 Ответ

6 голосов
/ 11 марта 2012

Когда вы отправляете намерение добавить событие в Календарь, вы запускаете действие Календарь.Намерения - это просто сообщение в систему;любая деятельность, которая может справиться с намерением, свободна "говорить".Если фильтр намерений более чем одного действия совпадает с намерением, пользователь видит экран «устранения неоднозначности», который позволяет ему или ей выбрать приложение для использования.В случае большинства Intents именно MIME-тип определяет, какие приложения будут отображаться.Вы можете написать свою собственную деятельность для обработки событий, если хотите.Фильтр намерений действия должен совпадать с фильтром календаря, и я бы не рекомендовал делать это, поскольку вы регистрируетесь для обработки каждого намерения, которое пытается добавить что-то в календарь!

У вас есть выборотправка намерения поставщику календаря (фактически приложению «Календарь», которое обращается к поставщику) или вставка данных самостоятельно с использованием API ContentResolver с поставщиком календаря.

Вы могли бы рассмотреть последний вариант действий и предоставить свой собственный пользовательский интерфейс вместо использования календаря, но я советую вам соблюдать осторожность при добавлении повторяющихся событий, поскольку правильно их настроить сложно.В общем случае разработчики должны использовать действие календаря, чтобы разрешить пользователям добавлять события.

Если вы используете намерение для запуска действия «вставка события» в календарь, вы не можете контролировать его пользовательский интерфейс.Для удобства действия календаря будут заполнять пользовательский интерфейс отправляемыми вами дополнениями.Если вы не отправите Extra, действие либо заполнит поле по умолчанию, либо оставит его пустым.Я не уверен, что это так, но это стандартная практика.

Разработчики часто упускают из виду руководства для разработчиков при разработке приложений.Взгляните на http://developer.android.com/guide/topics/providers/calendar-provider.html#intents,, который подробно описывает провайдера календаря.На этой странице перечислены все доступные дополнения, рассказывается, как использовать процесс ContentResolver () для вставки событий, и подробно описывается использование Intents.

В настоящее время я не думаю, что существует стандартный способ для приложениячтобы раскрыть структуру «Интентов», которые он обрабатывает, но для встроенных или связанных приложений, которые появляются на устройстве, вы всегда можете просто запросить здесь дополнительную информацию.Помните, что некоторые приложения поставляются в комплекте с платформой, но другие (например, Google Maps) являются отдельными.Они могут иметь публичные намерения / API, но вы должны знать, что они могут быть недоступны для устройства конкретного пользователя.

...