Windows Phoneアプリケーション開発入門

第25回LauncherとChooserを使ってみよう(1)

はじめに

2011年1月6日~9日にラスベガスで開催された「2011 International Consumer Electronics Show(CES⁠⁠」にて、Windows Phone 7関連のニュースがありました。

当初Windows Phone 7では非対応とされていたコピーアンドペースト機能に対応したアップデートについての情報が発表されました。

Windows Phone 7のコピーアンドペースト機能は、iPhoneのものと同じ操作感で使えそうです。単語をタップするとその単語がハイライトされて、単語の左右に矢印が表示され、矢印をドラッグすることで選択範囲を調整することができます。ハイライトの右上に表示されているコピーアイコンをタップすることで「コピー⁠⁠、ソフトウェアキーボードの上に表示されるペーストアイコンをタップすると「ペースト」ができるようです。

ほかにも「アプリケーションとゲームのパフォーマンス改善」「Windows Phone 7 Marketplaceを使いやすくする改善」が織り込まれているようです。このあたりはまだ端末が発売されていない日本のユーザーにはあまり関係ないかもしれませんね。

これはCESでの発表ではありませんが、韓国の最大手キャリアのSK Telecomから2011年後半に韓国語に対応したWindows Phone 7がリリースされるという非公式な噂も流れています。完全に私の推測ではありますが、日本語を含めた多言語化対応のアップデートがその時期にリリースされるのではないかと考えております。

Windows Phone 7の「Launcher」「Chooser」

さて、現時点のWindows Phone 7は、アプリケーションからシステムにアクセスする方法が提供されていませんので、必然的に「Launcher」「Chooser」を使うことになります。

「Launcher」「Chooser」を簡単に説明すると、Microsoft.Phone.Tasks名前空間にあるOSの標準アプリケーションを呼び出すLauncherと、ファイルを開くダイアログのような形で利用できるChooserのことです。アドレス帳だけではなく携帯電話に関連する機能へのアクセスを簡単に実現することができます。例えば、電話を掛けるLauncherやカメラで撮影したり電話番号を選ぶChooserが用意されています。

今回は、LauncherとChooserの中でも、特にアドレス帳やEメール送信などPIM(Personal Information Manager)に関する機能のTipsをご紹介したいと思います。本題のWindows Phone 7での使い方の前にWindows Mobile 6.xでPIMを使うためにはどうしていたのかをご紹介したいと思います。

Windows Mobile 6.xでPIMを使ってみよう

Windows Mobile 6.xでは、何かを選択する場合などのChooserが、標準UIとして提供されていません。標準クラスで用意されているものだけでできることは、主にOutlook Mobileからデータを追加・取得することだけでしょうか。UIの作成はデベロッパー側に任されます。

アドレス帳の取得/保存

Microsoft.WindowsMobile.PocketOutlook名前空間を使用することで、アドレス帳のデータにアクセスすることができます。アドレス帳のデータを取得するには、OutlookSessionインスタンスのContactsプロパティを使います。以下のコードでは、ComboBoxにアドレス帳のデータを渡して表示しています。

// Outlookセッションの作成
Microsoft.WindowsMobile.PocketOutlook.OutlookSession outlook
  = new Microsoft.WindowsMobile.PocketOutlook.OutlookSession();
ComboBox1.DataSource = outlook.Contacts.Items;
ComboBox1.DisplayMember = "FileAs";

取得した連絡先をComboBoxへバインディングしてみました。

図1 Windows Mobile 6.xで取得した連絡先をComboBoxへバインディング
図1 Windows Mobile 6.xで取得した連絡先をComboBoxへバインディング

次にアドレス帳に連絡先を登録する方法をご紹介します。

// 連絡先を作成し、詳細を設定する
Microsoft.WindowsMobile.PocketOutlook.Contact contact
  = new Microsoft.WindowsMobile.PocketOutlook.Contact();

// 苗字
contact.FirstName = "苗字";
contact.YomiFirstName = "ミョウジ";

// 名前
contact.LastName = "名前";
contact.YomiLastName = "ナマエ";

// 会社の名前
contact.CompanyName = "会社名";
contact.CompanyName = "カイシャメイ";

// ニックネーム
contact.Nickname = "にっくねーむ";

// ポケベルの番号
contact.PagerNumber = "0123456789";

// メールアドレス
contact.Email1Address = "[email protected]";

// 携帯電話の電話番号
contact.MobileTelephoneNumber = "09012345678";

// 自宅の電話番号
contact.HomeTelephoneNumber = "0612345678";

// 住所
contact.HomeAddressPostalCode = "123-4567";
contact.HomeAddressState = "大阪府";
contact.HomeAddressCity = "大阪市";
contact.HomeAddressStreet = "北区";

// Outlookセッションの作成し、
// 連絡先を Outlook の連絡先フォルダに追加する
using (Microsoft.WindowsMobile.PocketOutlook.OutlookSession outlook
  = new Microsoft.WindowsMobile.PocketOutlook.OutlookSession()) {
  outlook.Contacts.Items.Add(contact);
}
図2 Windows Mobile 6.xで連絡先を登録
図2 Windows Mobile 6.xで連絡先を登録

スケジュールの取得/保存

スケジュールのデータを取得するには、OutlookSessionインスタンスのAppointmentsプロパティを使います。以下のコードでは、ComboBoxにスケジュールのデータを渡して表示しています。

// Outlookセッションの作成
Microsoft.WindowsMobile.PocketOutlook.OutlookSession outlook
  = new Microsoft.WindowsMobile.PocketOutlook.OutlookSession();
ComboBox1.DataSource = outlook.Appointments.Items;
ComboBox1.DisplayMember = "FileAs";

次にスケジュール(予定)を追加する方法をご紹介します。

// 予定を作成し、詳細を設定する
Microsoft.WindowsMobile.PocketOutlook.Appointment appointment
  = new Microsoft.WindowsMobile.PocketOutlook.Appointment();

// 件名を設定する
appointment.Subject = "スマートフォン勉強会";

// 予定の開始を 2009 年 5 月 16 日、13:00 に設定する
appointment.Start = new DateTime(2009, 5, 16, 13, 0, 0);

// 予定は 5 時間で終了する
appointment.Duration = new TimeSpan(5, 0, 0);

// デバイスの振動を使用してリマインダを発行する
appointment.ReminderVibrate = true;

// ユーザーが解除するまでリマインダを繰り返す
appointment.ReminderRepeat = true;

// Outlookセッションの作成し、
// 予定を Outlook の予定表フォルダに追加する
using (Microsoft.WindowsMobile.PocketOutlook.OutlookSession outlook
  = new Microsoft.WindowsMobile.PocketOutlook.OutlookSession()) {
  outlook.Appointments.Items.Add(appointment);
}

仕事の取得/保存

「仕事」というと何を指すのかよく判りませんが、Windows MobileではToDoやタスクのことを日本語で「仕事」と表現していました。ここではタスクと表現させて頂きたいと思います。

タスクのデータを取得するには、OutlookSessionインスタンスのTasksプロパティを使います。以下のコードでは、ComboBoxにタスクのデータを渡して表示しています。

// Outlookセッションの作成
Microsoft.WindowsMobile.PocketOutlook.OutlookSession outlook
  = new Microsoft.WindowsMobile.PocketOutlook.OutlookSession();
ComboBox1.DataSource = outlook.Tasks.Items;
ComboBox1.DisplayMember = "FileAs";

次にタスク(仕事)を追加する方法をご紹介します。

// 仕事を作成し、詳細を設定する
Microsoft.WindowsMobile.PocketOutlook.Task theTask
  = new Microsoft.WindowsMobile.PocketOutlook.Task();

// 件名を設定する
theTask.Subject = "○×仕様書作成";
// 仕事の期限を 2005 年 5 月 9 日、午前 9:00 に設定する
theTask.ReminderTime = new DateTime(2005, 5, 9, 9, 0, 0);
// デバイスの振動を使用してリマインダを発行する
theTask.ReminderVibrate = true;
// ユーザーが解除するまでリマインダを繰り返す
theTask.ReminderRepeat = true;

// Outlook セッションを作成し、
// 仕事を Outlook の仕事フォルダに追加する
using (Microsoft.WindowsMobile.PocketOutlook.OutlookSession outlook
  = new Microsoft.WindowsMobile.PocketOutlook.OutlookSession()) {
  session.Tasks.Items.Add(theTask);
}

電話をかける

Professional Edition、Stardard Editionでは電話の発着呼の機能に対応しています。電話をかけるには、Microsoft.WindowsMobile.Telephony名前空間のPhoneクラスを使用します。Talkメソッドを使用して、電話アプリを立ち上げることができます。

// 電話を掛ける
Microsoft.WindowsMobile.Telephony.Phone phone
  = new Microsoft.WindowsMobile.Telephony.Phone();
phone.Talk("09012345678");

SMSを送信する

同じキャリア同士では、EメールよりもSMSを使う方が楽かもしれませんね。

Microsoft.WindowsMobile.PocketOutlook名前空間のSmsMessageクラスを利用することで、簡単にSMSメッセージを送信することができます。

Microsoft.WindowsMobile.PocketOutlook.SmsMessage smsMsg
  = new SmsMessage("09012345678", "本文");
// メッセージの送信
smsMsg.Send();

Eメールを送信する

デスクトップ版の.NET Frameworkですと、System.Net.Mail名前空間のクラスを使ってメールを送信することができるのですが、.NET Compact Frameworkでは削除されており使用できません。Eメールを送信するには、代わりにMicrosoft.WindowsMobile.PocketOutlook 名前空間のOutlookSessionクラスを利用しましょう。

// Outlookセッションの作成
using (Microsoft.WindowsMobile.PocketOutlook.OutlookSession outlook
   = new Microsoft.WindowsMobile.PocketOutlook.OutlookSession())
{
   EmailMessage email = new EmailMessage();
   email.To.Add(new Recipient("[email protected]"));
   email.Subject = "タイトル";
   email.BodyText = "本文";

   // 1つめのEメールアカウントからメールを送信する
   EmailAccount account = outlook.EmailAccounts(0);
   email.Send(account);
}

Windows Phone 7でPIMを使ってみよう

Windows Mobile 6.xと比べると、Windows Phone 7では直感的に操作できる標準UIが数多く提供されていることが分かります。その反面、Windows Mobileでは取得できたデータ一覧が取得できなくなっていることに加え、スケジュールやタスクについてはアプリケーション側から操作することができなくなっています。

LauncherとChooserは、Microsoft.Phone.Tasks名前空間に格納されておりコードも非常にシンプルです。

メールアドレス/電話番号を取得する

メールアドレスの取得には、EmailAddressChooserTaskクラスを使用します。

var task = new Microsoft.Phone.Tasks.EmailAddressChooserTask();
task.Completed += new EventHandler<EmailResult>(task_Completed);
task.Show();

上記のコードを実行すると、メールアドレスを選択するChooserが起動されます。

図3 メールアドレスを選択するChooser
図3 メールアドレスを選択するChooser

Chooserから任意の人物を選択すると、Completedイベントに選択した人物のメールアドレスが取得できます。

void task_Completed(object sender, EmailResult e)
{
  if (e.TaskResult == TaskResult.OK)
  {
      addressTextBox.Text = e.Email;
  }
}

電話番号もメールアドレス取得と同様のコードが使えます。電話番号の取得の場合は、PhoneNumberChooserTaskクラスを使用します。

var task = new Microsoft.Phone.Tasks.PhoneNumberChooserTask();
task.Show();

メールアドレス/電話番号を保存する

メールアドレスの保存には、SaveEmailAddressTaskクラスを使用します。

var task = new Microsoft.Phone.Tasks.SaveEmailAddressTask()
{
  Email = "[email protected]"
};
task.Show();
図4 メールアドレスの保存
図4 メールアドレスの保存

電話番号もメールアドレス保存と同様のコードが使えます。電話番号の保存の場合は、SavePhoneNumberTaskクラスを使用します。

var task = new Microsoft.Phone.Tasks.SavePhoneNumberTask()
{
  PhoneNumber = "1234567890"
};
task.Show();
図5 電話番号の保存
図5 電話番号の保存

電話をかける

電話をかけるには、Microsoft.Phone.Tasks名前空間のPhoneCallTaskクラスを使用します。

var task = new Microsoft.Phone.Tasks.PhoneCallTask()
{
  DisplayName = "酢酸に電話しちゃうよ",
  PhoneNumber = "123 456 789"
};
task.Show();

上記のコードを実行すると、本当に電話してもよいか?の確認が入ります。Callボタンをタップすると実際に電話がかかります。

図6 電話をかける前には確認のためのダイアログが表示される
図6 電話をかける前には確認のためのダイアログが表示される

SMSを送信する/Eメールを送信する

「SMSを送信する」いうのは正しい表現ではなく、SMSアプリケーションに送信する情報を送ると言ったほうが正しいでしょうか。SMSアプリケーションを立ち上げるには、Microsoft.Phone.Tasks名前空間のSmsComposeTaskクラスを使用します。

var task = new Microsoft.Phone.Tasks.SmsComposeTask()
{
  To = "[email protected]",
  Body = "ここに本文を書きまする"
};
task.Show();

Eメールアプリケーションを立ち上げる場合は、EmailComposeTaskクラスを使用します。

var task = new Microsoft.Phone.Tasks.EmailComposeTask()
{
  To = "[email protected]",
  Subject = "題名",
  Body = "本文",
  Cc = "[email protected]"
};
task.Show();

さいごに

Windows Phone 7でのPIM機能に関わるLauncherとChooserの使い方についてご紹介いたしました。次回はマルチメディア機能に関わるLauncherとChooserの使い方についてご紹介させて頂きたいと思います。

以上で今回は終わりです。ありがとうございました。

おすすめ記事

記事・ニュース一覧