SaveRingtoneTaskで着メロ設定と電話をかける
電話をかける
ランチャーであるPhoneCallTaskを使って電話をかけるサンプルの紹介です。
このプログラムで実装する機能の動作を、下記に解説しておきます。
VS2010からデプロイ先に「Windows Phone Device」を選択して、「デバッグ(D) /デバッグ開始(S)」と選択します。プログラムが実機(IS12T)にデプロイされます。
電話案内の一覧が表示されます。「時報」をタップします。次に[発信]をタップします。時報が音声で告げられます(図3)。
図3:「時報」を選択して117に電話した(クリックで拡大) |
サンプル一式は、会員限定特典としてダウンロードできます。記事末尾をご確認ください。
動画は下記です。実際には時報が聞こえていますが、動画では音声は入っていません。
プロジェクトの作成
VS 2010のメニューから[ファイル(F)/新規作成(N)/プロジェクト(P)]を選択します。次に、「Windows Phoneアプリケーション」を選択して、「名前(N)」に任意のプロジェクト名を指定します。ここでは「WP71_ PhoneCallTask」という名前を付けています。Windows Phoneのバージョンは7.1を選択します。ソリューションエクスプローラー内に、リスト3のXML文書ファイル(PhoneGuidance.xml)を追加しておきます。
またXML文書をLINQ to XMLで処理するため、VS2010メニューの「プロジェクト(P)/参照の追加(R)」からSystem.Xml.Linqを追加しておいてください。
ダウンロードされたサンプルにはXML文書ファイルは追加済です。
リスト3 XML文書ファイル(PhoneGuidance.xml)
「天気予報」に関しては、知りたい地域の市外局番を177の前に入力します。089は愛媛県になります。 他の電話番号にも市外局番がいるかもしれません。実際にかけて試すことができないのでご容赦ください。 「現在この電話番号は使われておりません」とアナウンスがあった場合は、頭に市外局番を入れてかけてみてください。 <?xml version="1.0" encoding="utf-8" ?> <電話案内> <電話番号 title="警察">110</電話番号> <電話番号 title="火事・救助・救急">119</電話番号> <電話番号 title="海の事件・事故の通報">118</電話番号> <電話番号 title="電話の新設・移転">116</電話番号> <電話番号 title="電話の故障">113</電話番号> <電話番号 title="お話し中調べ">114</電話番号> <電話番号 title="電報">115</電話番号> <電話番号 title="電話番号案内">104</電話番号> <電話番号 title="時報">117</電話番号> <電話番号 title="天気予報">089177</電話番号> </電話案内>
MainPage.xamlの編集
x:NameがPageTitleというTextBlockのTextプロパティに「PhoneCallTask」と指定します。
日本語表示設定
「SaveRingtoneTaskで着メロ設定」を参照してください。
書き出されるXAMLコードは省略します。
次に、MainPage.xamlを展開して表示される、MainPage.xaml.vbをダブルクリックしてリスト4のコードを記述します。
ロジックコードを記述する
リスト4 (MainPage.xaml.vb)
Option Strict On LINQ to XMLでXMLを処理するクラスの含まれるSystem.Xml.Linq名前空間をインポートします。 Imports System.Xml.Linq ランチャーやチューザーに関するクラスの含まれる、Microsoft.Phone.Tasks名前空間をインポートします。 Imports Microsoft.Phone.Tasks Partial Public Class MainPage Inherits PhoneApplicationPage ' コンストラクター Public Sub New() InitializeComponent() End Sub XElementクラス型のメンバ変数xmldocを宣言します。 Dim xmldoc As XElement
ページが読み込まれた時の処理
XElement.LoadメソッドでXML文書ファイル(PhoneGuidance.xml)を読み込みます。 文字列型の新しいリストであるphoneListオブジェクトを宣言します。 <電話番号>要素のコレクションに対して、各要素を変数 result に格納しながら以下の処理を繰り返します。 文字列型のリストであるphoneListオブジェクトにAddメソッドで、<電話番号>要素の属性”title”の値を追加していきます。 ListBoxのItemsSourceプロパティにphoneListオブジェクトを指定します。これで、電話案内のメニュー一覧が表示されます Private Sub MainPage_Loaded(sender As Object, e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded xmldoc = XElement.Load("PhoneGuidance.xml") Dim phoneList As New List(Of String) For Each result In From c In xmldoc.Descendants("電話番号") Select c phoneList.Add(result.Attribute("title").Value) Next ListBox1.ItemsSource = phoneList End Sub
任意の電話案内のメニューが選択された時の処理
新しいPhoneCallTaskのインスタンス、phoneTaskオブジェクトを生成します。 変数phoneNumberに、選択されたListBoxの項目のインデックスに該当する、<電話番号>要素の値を格納します。 phoneTaskオブジェクトのDisplayNameプロパティに、選択された項目名と電話番号を連結して指定します。 PhoneNumberプロパティには変数phoneNumberに格納されている電話番号を指定します。 Showメソッドでタスクを実行します。 Private Sub ListBox1_SelectionChanged(sender As Object, e As System.Windows.Controls.SelectionChangedEventArgs) Handles ListBox1.SelectionChanged Dim phoneTask As New PhoneCallTask Dim phoneNumber As String = xmldoc.Descendants("電話番号")(ListBox1.SelectedIndex).Value With phoneTask .DisplayName = ListBox1.SelectedItem.ToString & ":" & phoneNumber & "に電話します。" .PhoneNumber = phoneNumber .Show() End With End Sub End Class
「SaveRingtoneTaskで着メロ設定」サンプルプログラム
「電話をかける」サンプルプログラム