PR

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
Think IT会員限定特典
  • 「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のWebサイトにログインすることでさまざまな限定特典を入手できるようになります。

Think IT会員サービスの概要とメリットをチェック

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