SaveRingtoneTaskで着メロ設定と電話をかける

2011年11月18日(金)
PROJECT KySS

電話をかける

ランチャーである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で着メロ設定」サンプルプログラム

  • 「電話をかける」サンプルプログラム

四国のSOHO。薬師寺国安(VBプログラマ)と、薬師寺聖(デザイナ、エンジニア)によるコラボレーション・ユニット。1997年6月、Dynamic HTMLとDirectAnimationの普及を目的として結成。共同開発やユニット名義での執筆活動を行う。XMLおよび.NETに関する著書や連載多数。最新刊は「Silverlight実践プログラミング」両名とも、Microsoft MVP for Development Platforms - Client App Dev (Oct 2003-Sep 2012)。http://www.PROJECTKySS.NET/

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています