Как скрыть календарь моего приложения из встроенного приложения календаря?

Моему приложению нужен внутренний календарь. Я могу создать новый календарь следующим образом:

var store = await AppointmentManager.RequestStoreAsync(AppointmentStoreAccessType.AppCalendarsReadWrite);
var cacheCalendar = await store.CreateAppointmentCalendarAsync("unique name here");

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

Поэтому я пытаюсь скрыть календарь следующим образом:

var store = await AppointmentManager.RequestStoreAsync(AppointmentStoreAccessType.AppCalendarsReadWrite);
var cacheCalendar = await store.CreateAppointmentCalendarAsync("unique name here");
cacheCalendar.IsHidden = true; // <---- make calendar hidden
await cacheCalendar.SaveAsync(); // <---- save; error here

При вызове SaveAsync я получаю следующее исключение:

Доступ запрещен. (Исключение из HRESULT: 0x80070005 (E_ACCESSDENIED))"

Почему я не могу скрыть свой календарь из встроенного в телефон приложения календаря? Это недокументированное ограничение? Есть ли другие способы сделать это?

(Примечание: я тестировал это на Windows 10 Mobile, а также на настольной версии Win 10 — та же ошибка.)

Редактировать/добавлять: поскольку Энтони обнаружил, что свойство IsHidden задокументировано как доступное только для чтения в MSDN, вот скриншот из Visual Studio, показывающий общедоступный установщик (который делает его компилируемым, запускаемым и, по-видимому, законным для вызова):

Свойство IsHidden имеет установщик

(Приложение нацелено на Win 10 Build 10586 — может быть, оно новое, но незаконченное?)


person Heinrich Ulbricht    schedule 17.07.2016    source источник
comment
Привет, Генрих, спасибо, что сообщили об этом, вы действительно не должны иметь возможность устанавливать IsHidden. Я передал это в Microsoft, и они подали внутренний BR, который связан с этим элементом UV wpdev.uservoice.com/forums/110705-universal-windows-platform/.   -  person Lance McCarthy    schedule 19.07.2016
comment
@Lance Нет проблем, большое спасибо. Грустно, хотя API предал меня.   -  person Heinrich Ulbricht    schedule 19.07.2016
comment
Можете ли вы подтвердить, используете ли вы SDK 106586 или SDK 14393 Preview? Похоже, для вас доступен вариант, которым я поделюсь, как только получу подтверждение от команды.   -  person Lance McCarthy    schedule 20.07.2016
comment
@Lance Идентификатор моего универсального Windows SDK в Visual Studio: UAP,Version=10.0.10586.0   -  person Heinrich Ulbricht    schedule 21.07.2016
comment
@Lance Есть новости об упомянутом варианте? Тем временем я обнаружил еще одну ошибку: wpdev.uservoice.com/forums/110705-universal-windows-platform/ ...   -  person Heinrich Ulbricht    schedule 28.07.2016
comment
Я не слышал никаких обновлений по проблеме IsHidden, но у них есть мое приложение репо, и они его рассматривают. Я дам вам знать, как только я это сделаю.   -  person Lance McCarthy    schedule 29.07.2016


Ответы (2)


Это была ошибка в 10586, но если вы используете 14393 SDK, вы можете использовать IsHidden, если ваше приложение имеет права на календарь без исключения InvalidAccessException.

https://wpdev.uservoice.com/forums/110705-universal-windows-platform/suggestions/15278775-appointmentcalendar-ishidden-setter-throws-a-inval

person Clint Rutkas    schedule 19.07.2016
comment
Спасибо за подтверждение, рад видеть вас, ребята, здесь. В эпоху быстро развивающихся API такие проблемы станут проблемой для таких платформ, как Stack Overflow. Я проголосовал за проблему с Uservoice и надеюсь когда-нибудь скрыть свой календарь ;) - person Heinrich Ulbricht; 19.07.2016
comment
Да, рад видеть вас, ребята, здесь. Интересно, как они так быстро узнали ;-) - person Anthony Russell; 24.07.2016
comment
@Clint После обновления Win 10 до Anniversary и переключения SDK на 10.0.14393.0 проблема сохраняется, то же исключение. DeleteAsync() также дает мне InvalidAccessException. Что здесь может быть не так? - person Heinrich Ulbricht; 30.08.2016
comment
и ваш минимум, и цель 14393? - person Clint Rutkas; 01.09.2016

Честно говоря, я удивлен, что это даже компилируется.

Согласно документации MSDN для AppointmentCalandar

IsHiddenТолько для чтения — определяет, скрыт ли календарь встреч во встроенном пользовательском интерфейсе календаря устройства.

Это свойство только для чтения и установить нельзя.

Что касается вашего фактического вопроса, после тщательного изучения документации выясняется, что это упущение в API. Я бы поднял эту проблему на форумах MSDN.

person Anthony Russell    schedule 18.07.2016
comment
Ты прав! Документы утверждают, что это только для чтения. Однако он компилируется - я добавил скриншот из Visual Studio. Но поведение предполагает, что документация правильная на данный момент. Хороший улов. Я должен попытаться получить официальную информацию об этом. - person Heinrich Ulbricht; 19.07.2016