使用 WinRT Appointments API 在没有用户确认的情况下编写约会

Posted

技术标签:

【中文标题】使用 WinRT Appointments API 在没有用户确认的情况下编写约会【英文标题】:Write appointment without user confirmation using WinRT Appointments API 【发布时间】:2014-08-14 12:22:07 【问题描述】:

我正在 Windows 8.1 中试验新的 WinRT Appointments API,基于 Microsoft 的 MSDN 网站上提供的示例:http://code.msdn.microsoft.com/windowsapps/Appointments-API-sample-2b55c76e

效果很好,我可以毫不费力地添加约会,但是当使用来自 Windows.ApplicationModel.Appointments.AppointmentManager 命名空间的方法 ShowAddAppointmentAsync 时,相关用户总是会确认,该命名空间显示约会提供者添加约会 UI。

我正在寻找一种解决方案来在默认的 Windows 8 日历中添加更大的约会集合,而不需要确认集合中的每个约会。有没有办法解决这个问题并批量插入约会?也许是 Windows Live SDK?

【问题讨论】:

也许这会有所帮助msdn.microsoft.com/en-us/library/hh826523.aspx 【参考方案1】:

这是不可能的,通过使用 WinRT 约会 API。 始终需要用户交互。 MS 的设计决定是某些操作需要用户交互,这就是其中之一。

正如@Ken Tucker 所说,您可以使用 windows live api 来创建约会,但这需要您的应用程序的用户在 windows live 中唱歌并获得所需的权限。

【讨论】:

【参考方案2】:

API在保存之前确实会提示用户,但是有一个规定可以做到这一点。

var appointment = new Windows.ApplicationModel.Appointments.Appointment();
    appointment.details = "This is a dummy appointment";
    appointment.reminder = 15000;
    appointment.subject = "TEST APPPOINTMENT";

    var x = new Windows.ApplicationModel.Appointments.AppointmentManager.requestStoreAsync(Windows.ApplicationModel.Appointments.AppointmentStoreAccessType.appCalendarsReadWrite).done(function (apppointmentStore) 
        apppointmentStore.createAppointmentCalendarAsync("TEST CALENDAR").done(function (calendar) 
            calendar.saveAppointmentAsync(appointment);
        );
    )

【讨论】:

【参考方案3】:

这是一个使用 C# 的示例

        private AppointmentCalendar currentAppCalendar;
    private AsyncLazy<AppointmentStore> lazyAppointmentStore = new AsyncLazy<AppointmentStore>(async () =>
    
        var appStore = await AppointmentManager.RequestStoreAsync(AppointmentStoreAccessType.AppCalendarsReadWrite);
        return appStore;
    );

    private AppointmentStore AppStore  get  return lazyAppointmentStore.Value.Result;  

    public AppointmentService()
    
    

    public async Task CreateCalendar()
    
        IReadOnlyList<AppointmentCalendar> appCalendars =
            await AppStore.FindAppointmentCalendarsAsync(FindAppointmentCalendarsOptions.IncludeHidden);

        AppointmentCalendar appCalendar = null;

        // Apps can create multiple calendars. Here app creates only one.
        if (appCalendars.Count == 0)
        
            appCalendar = await AppStore.CreateAppointmentCalendarAsync(Constants.CalendarName);
        
        else
        
            appCalendar = appCalendars[0];
        

        appCalendar.OtherAppReadAccess = AppointmentCalendarOtherAppReadAccess.Full;
        appCalendar.OtherAppWriteAccess = AppointmentCalendarOtherAppWriteAccess.SystemOnly;

        // This app will show the details for the appointment. Use System to let the system show the details.
        appCalendar.SummaryCardView = AppointmentSummaryCardView.App;

        await appCalendar.SaveAsync();

        currentAppCalendar = appCalendar;
    

    public async Task<bool> CreateNewAppointment(Data.Schemas.Task task)
    
        if (null == task)
            throw new ArgumentNullException("task");

        Appointment newAppointment = new Appointment();
        this.SaveAppointmentData(task, newAppointment);

        try
        
            // Show system calendar to the user to be edited
            string appointmentId = await AppointmentManager.ShowAddAppointmentAsync(newAppointment, Windows.Foundation.Rect.Empty);                
            return ! string.IsNullOrWhiteSpace(appointmentId);

            // Just save the appointment
            // await currentAppCalendar.SaveAppointmentAsync(newAppointment);                  
            // return true;
        
        catch
        
            return false;
        
    

查看my post,了解有关 AsyncLazy 的更多信息。

希望对您有所帮助。 问候。 娟路

【讨论】:

非常感谢!我一直在到处寻找 Windows 的日历功能。澄清一下,每次您想设置新约会时都必须创建一个新日历吗?

以上是关于使用 WinRT Appointments API 在没有用户确认的情况下编写约会的主要内容,如果未能解决你的问题,请参考以下文章

WinRT 中的 Facebook 聊天 API/XMPP X-FACEBOOK-PLATFORM

我可以从 Qt 应用程序访问哪种类型的 WinRT API?

如何从 WinRT Windows.Media API 中获取 Hololens 可定位相机视图和投影矩阵

与WinRT组件进行操作

如何阅读winmd(WinRT的元数据文件)?

如何在“native c ++”环境中使用WinRT IAsyncOperation *对象