2016-03-30 10 views
2

WindowsPhone用のWindows10アプリを作成しています。ユーザのプロンプトなしでカレンダーに追加する方法UWP C#

アプリはユーザーカレンダーに予定を追加する必要があります。これまで私はこれを行うことができましたが、ユーザーは各予定を承認する必要があります。ここで

は私が(ストレートGitHubの上UWP例のうち、ほとんど引っ張られ)ているコードです:

private async void CreateTestCalendarEntry_Click(object sender, RoutedEventArgs e) 
{ 
    string errorMessage = null; 
    var appointment = new Windows.ApplicationModel.Appointments.Appointment(); 

    // StartTime 
    var date = DateTime.Now; 
    var timeZoneOffset = TimeZoneInfo.Local.GetUtcOffset(DateTime.Now); 
    var startTime = new DateTimeOffset(date.Year, date.Month, date.Day, date.Hour, date.Minute, date.Second, timeZoneOffset); 
    appointment.StartTime = startTime; 

    // Subject 
    appointment.Subject = "Test Calendar Entry " + date.ToString(); 

    if (appointment.Subject.Length > 255) 
    { 
     errorMessage = "The subject cannot be greater than 255 characters."; 
    } 

    // Location 
    appointment.Location = "Japan"; 

    if (appointment.Location.Length > 32768) 
    { 
     errorMessage = "The location cannot be greater than 32,768 characters."; 
    } 

    // Details 
    appointment.Details = "Details"; 

    if (appointment.Details.Length > 1073741823) 
    { 
     errorMessage = "The details cannot be greater than 1,073,741,823 characters."; 
    } 

    // Duration 
    // All Day 
    appointment.AllDay = true; 

    // Reminder    
    appointment.Reminder = TimeSpan.FromDays(1); 

    //Busy Status    
    appointment.BusyStatus = Windows.ApplicationModel.Appointments.AppointmentBusyStatus.WorkingElsewhere; 

    // Sensitivity    
    appointment.Sensitivity = Windows.ApplicationModel.Appointments.AppointmentSensitivity.Public; 

    var rect = new Rect(new Point(Window.Current.Bounds.Width/2, Window.Current.Bounds.Height/2), new Size()); 
    String appointmentId = await Windows.ApplicationModel.Appointments.AppointmentManager.ShowAddAppointmentAsync(appointment, rect, Windows.UI.Popups.Placement.Default); 

} 

このコードを使用して、のawaitラインは、ユーザーのカレンダーを開くと、次のユーザーを表示します認可または削除することができます

保存ボタンを押す

User Authorisation for calendar insert

、予想通り行います。

問題点 - 私はユーザーのカレンダーに追加する20の予定があると仮定すると、ユーザーはそれぞれを承認するつもりはありません。私のアプリを離れることなく、またそれを許可する必要のないアポイントを作成するにはどうすればよいですか?

+0

現在のところ、apiはありません。 [uservoice](wpdev.uservoice.com)に提案してください。 –

+1

あなたが何を求めているか考えてみてください。これが許可されていれば、誰もが知っていることなく1000冊のスパムカレンダーの予定をインポートできるアプリを作成することができます。 1つのスパム予約でさえ、あまりにも多くなります。これは設計によるものであり、変更する必要はありません。 – anothershrubery

+0

ユーザーは、最近、迷惑メールカレンダーのエントリが心配することの少ないように、アプリに非常に多くの権限(連絡先の名前と電話番号、場所のデータへのアクセス、通知、電子メール、メディアなど)を提供しています。さらに、ユーザーは、インストールする前にアプリがアクセスできるものを見ることができます。 – Rick

答えて

3

これは、独自のカスタムカレンダーに書き込むことで実行できます。コードの必要な行がこれらは以下のとおりです。

async private Task CreateCalenderEntry() 
    { 
     // 1. get access to appointmentstore 
     var appointmentStore = await AppointmentManager.RequestStoreAsync(AppointmentStoreAccessType.AppCalendarsReadWrite); 

     // 2. get calendar 
     var appCustomApptCalendar = await appointmentStore.CreateAppointmentCalendarAsync("MyCalendar"); 

     // 3. create new Appointment 
     var appo = new Windows.ApplicationModel.Appointments.Appointment(); 

     // appointment properties 
     appo.AllDay = true; 
     appo.Subject = "Mein Termin";    
     appo.StartTime = DateTime.Now; 

     // 4. add 
     await appCustomApptCalendar.SaveAppointmentAsync(appo); 
    } 

私はただのWindows 10のデスクトップ上でそれを試してみました、それが働きました。 W10Mobileでも動作するはずです。 ただし、ユーザーはカスタムカレンダーを表示する必要があります。私はこれがあなたのために働くはずだと思います。

私はかつてこれをカバーするブログポスト(ドイツ語)を書いた:https://blogs.msdn.microsoft.com/dmx/2014/07/24/termine-im-windows-phone-per-api-anlegen-ohne-broker/ これはバックグラウンドからも機能すると説明しています。 (コードだけでは不十分な場合はhttp://www.bing.com/translatorを使用してください)、ご迷惑をおかけして申し訳ありません。

+3

こんにちは、情報ありがとう - これは、デバイス間で同期するデフォルトのカレンダー(Outlookなど)を使用していたのではなく、カスタムカレンダーがそのデバイスでのみ使用できることを意味しますか?私はUWPとモバイル開発者が初めてです。 – Rick

+3

私はこのことについてさらに知りたいです。私は上記のRickのソリューションを使用していましたが、Windows 10のデスクトップカレンダーアプリからGmailと同期し、すべてのデバイスで同期していました。 これは迷惑なポップアップを取り除く良いソリューションですが、ここではすべてのデバイスのアクセシビリティが重要です。解決策があれば、私たちはそれを聞いてみたい! – user3429738

関連する問題