2011年12月6日火曜日

サードパーティ製のWindows Phone用のコントロールを探す&利用してみよう!

この季節になると、技術系のサイトは色々と賑やかになります。その理由が【アドベンドカレンダー】というものの存在です。アドベンドカレンダーというものは、キリスト降誕を待ち望むの期間(待降節とか降臨節というそうです)に連作である一定のテーマに沿ったTips等をブログ等を利用して発表していくものです。キリスト教信者の多い西欧ならではイベントですね。

今年はWindows Phoneでアドベントカレンダーが企画されましたので、僕も本日12月6日を担当させて頂くことになりました。
Windows Phone Advent Calendar
http://atnd.org/events/22351

Windows Phoneの話題ですから、それに沿ったモノと云うことで、今回はテクニックではなくサードパーティで現在販売されているコンポーネント集を色々ご紹介したいなと思います。
各コントロールの詳細な説明は、少々骨が折れるので割愛しますが、各コントロール集はどれも魅力のあるコントロール集ですので試してみてはいかがでしょうか。

Silverlight Toolkit for Windows Phone

サードパーティが販売しているわけではありませんが、マイクロソフトのSilverlight開発チームがフリー公開しているコントロール集です。このコントロール集は、マイクロソフトの開発チームが公開しているだけあって非常に有用性があります。初めて標準以外のコントロールを利用したいと思っている方にはオススメです。

提供されているコントロール

  • auto completebox
  • context menu
  • date+time converters
  • data & time pickers
  • expander view
  • gestures
  • hubtile
  • list picker
  • lockable pivot
  • longlist selector
  • multi selectlist
  • performance progressbar
  • phone textbox
  • toggle switch
  • tilt effect
  • transitions
  • wrap panel
Infragistics Japan NetAdvantage for Windows Phone

インフラジスティクスジャパン社が提供しているコントロール集です。
現在、販売されているコントロール集で唯一日本語サポートが行われている製品です。
データを視覚化することを中心としたコントロールが用意されています。

提供されているコントロール
印は、今後のアップデートで提供予定です。

  • Barcode
  • Barcode Reader
  • Bullet Graph
  • Data Chart
  • Gauge
  • Info Box
  • Message Box
  • Slider
  • Treemap
  • Window
  • Inputs
  • Persistence Framework
  • Rating
  • ACS Control
Telerik RadControls for Windows Phone

米Telerik社が提供しているWindows Phone用コントロール集です。
提供されているコントロールの数が現在のところ一番多いのが特徴です。

提供されているコントロール

  • Animation Framework
  • ApplicationFrame
  • Auto CompleteBox
  • BusyIndicator
  • BulletGraph
  • Calendar
  • Chart
  • ContextMenu
  • DataBoundListBox
  • DataPicker
  • DateSelector
  • DockPanel
  • Gauge
  • JumpList
  • LayoutTransform
  • ListPicker
  • LoopingList
  • MessageBox
  • NumericUpDown
  • PickerBox
  • SlideView
  • ToggleSwitch
  • TimePicker
  • TimeSelector
  • TransitionControl
  • UniformGrid
  • Window
  • WrapPanel
ComponentOne Studio for Windows Phone

米ComponentOne社が提供しているWindows Phone用コントロール集です。
ファイル操作系のコントロールが用意されているのが特徴です。

提供されているコントロール

  • Chart
  • ContextMenu
  • CoverFlow
  • DateTimePicker
  • DockPanel
  • Excel
  • FlexGrid
  • Gauges
  • Imaging
  • LayoutTransformer
  • Maps
  • MaskedTextBox
  • NumericBox
  • PDF
  • PdfViewer
  • ProgressBar
  • Reflector
  • RichTextBox
  • ToggleSwitch
  • UniformGrid
  • WrapPanel
  • Zip

Windows Phone用のコントロール集は他のコントロール集と比べても比較的安価で入手できます。
一度試してみてはいかがでしょうか。
現在は、全国各地でハッカソンも開催されています。魅力的なアプリの一助としてご一考ください。

2011年11月24日木曜日

Marketplace Testkitを活用しよう!

Windows Phone SDKの中で有効なツールというと、Marketplace Testkitです。
このツールは、Windows Phoneアプリを公開する前に必要なテストを独自に一通り行えるツールです。

Marketplace Testkitは必ずVisual Studioから起動します。
起動の方法は「ソリューションエクスプローラー」で、対象のプロジェクトを選択して右クリックをすると「Marketplace Testkitを起動する」というメニューがありますので、選択してください。
marketplacetestkit

Marketplace Testkitには「アプリケーションの詳細」「自動テスト」「監視対象のテスト」「手動テスト」と、大きく分けて4つののテスト項目があります。

アプリケーションの詳細テスト

アプリケーションの詳細テストは、Marketplaceにアップロードするときに絶対必要なアイコンやスクリーンショットが用意できているか確認するためのものです。

自動テスト

自動テストは、上記の詳細テストの他にXAPファイルの検証、アプリケーションの機能の検証を行います。

監視対象のテスト

監視対象のテストは実機に実際にアプリケーションをデプロイして、以下の観点でチェックします。

  • 起動時間
  • アプリケーションのピーク時のメモリ使用量
  • アプリケーションの終了(クラッシュしないかどうかのチェック)
  • [戻る]ボタンの動作検証
手動テスト

手動テストは、Marketplaceに公開するための必須となるテスト項目です。
実際にMarketplaceの審査の際に行われているテストですので、このテスト項目を自分なりに消化しておくだけでもアプリケーション審査に合格する確率は上がります。
ただし、現在のバージョンではこの手動テストのテスト項目はすべて英文ですので、苦手な人には辛いかもしれません。
一応僕なりにテスト概要を和訳したものを以下に挙げておきますので参考にしてください。
詳細なテストの手順方法はBing Transratorなどの翻訳サイトを利用しながら、確認してください。

テスト項目 日本語訳 テスト内容概略

Applicable Application Tile Images

アプリケーションのタイルイメージ アプリケーションのショートカットとなるタイルのイメージが適切なものになっているかを確認します。
※デフォルトのタイルイメージのままだと、確実に審査に落ちます。

Multiple Devices Support

複数のデバイスのサポート 複数のデバイスで起動、終了などが正常に行えるかの確認をします。

Application Closure

アプリケーションのクローズ時の動作 アプリケーションを終了するときの動作を確認します。

Application Responsiveness

アプリケーションの応答 アプリケーションが規定の時間で応答できるかの確認をします。

Application Responsiveness After Being Closed

閉じ始めのアプリケーションの応答 アプリケーションを閉じた際の応答を確認します。

Application Responsiveness After Being Deactivated

Deactivated状態になるときのアプリケーションの応答 アプリケーションがDeactivatedに遷移したときのアプリケーションの応答を確認します。

Back Button: Previous Pages

[戻る]ボタン:前のページ [戻る]ボタンを押して、前のページに戻るか確認します。

Back Button: First Screen

[戻る]ボタン:最初のページ 最初のページで[戻る]ボタンを押すと、アプリケーションが終了するか確認します。

Back Button: Context Menus and Dialogs

[戻る]ボタン:コンテキストメニュー、ダイアログ コンテキストメニュー、ダイアログを表示しているときに[戻る]ボタンを押した時の動作を確認します。

Back Button: Games

[戻る]ボタン:ゲームアプリケーション ゲームアプリケーション実行中に[戻る]ボタンを押した時の動作を確認します。
※通常のSilverlightアプリケーションの場合は、確認しなくてもよいと思います。

Trial Applications

試用版 試用版アプリケーションの動作確認をします。
※試用機能を組み込んでいない場合は、確認する必要はありません。

Phone Calls

電話機能 アプリケーション起動中に着信があったときに影響がないかを確認します。

SMS and MMS Messages

SMSまたはMMSメッセージ SMSメッセージ送信に影響がないかを確認します。

Application Responsiveness With Incoming Phone Calls and Messages

着信またはメッセージ受信時のアプリケーションの応答 アプリケーション起動中に着信またはSMSメッセージがあったときのアプリケーションの応答を確認します。

Malicious Software Screening

悪意あるソフトウェア 悪意あるソフトウェア(マルウェア)であるかどうかを確認します。

Language Validation

言語の検証 アプリケーションのローカライズの確認をします。

Content and Themes

コンテンツおよびテーマ システムのテーマや背景を変更しても、アプリケーションが見やすいものになっているか確認します。

Technical Support Information

技術サポート情報 アプリケーション名、バージョン情報などが発見しやすい場所に表示されているか確認します。

Location Aware Application

位置認識アプリケーション 位置情報サービスをONにして位置情報をアプリケーションが取得できているか確認します。

Configurable Functionality

構成可能な機能 アプリケーションからトースト通知の設定が行えることを確認します。

Toast Notification Opt-In

トースト通知のオプトイン トースト通知を受信することの明示的なアクセス許可を要求しているか確認します。

Minimize Power Usage When Running Under a Locked Screen

ロック画面中の電力消費 アプリケーションを起動した後にデバイスをロックしたときにアプリケーションが停止しているか確認します。

Audio Playback and Battery Life Under a Locked Screen

ロック画面中のオーディオ再生とバッテリー寿命 音楽ファイルを再生している間にデバイスをロックしたときのバッテリー寿命を確認します。

Idle Behavior Under a Locked Screen

ロック画面中のアイドル状態の挙動 ロック画面中の挙動を確認します。

Minimum Battery Life Under a Locked Screen

ロック画面中の最小バッテリー寿命 ロック画面中の最小バッテリー寿命が規定時間以上か確認します。

Music + Video Hub Application Functionality

ミュージック+ビデオハブ機能 アプリケーションに組み込まれた機能が音楽、ビデオメディアに関連しているか確認します。

Music + Video Hub History and Now Playing List Functionality

ミュージック+ビデオハブの履歴、プレイリスト機能 ミュージック+ビデオハブの音楽またはビデオの履歴、または再生リストの一覧をタップしたときの動作を確認します。

Music + Video Hub History List Updates

ミュージック+ビデオハブの履歴リスト更新 アプリケーションで音楽またはビデオを再生した後にミュージック+ビデオハブの履歴が更新されているか確認します。

Music + Video Hub New List Updates

ミュージック+ビデオハブ新規リスト更新 アプリケーションで音楽タグなどのオブジェクトを新規作成したときにミュージック+ビデオハブに反映されるか確認します。

Music + Video Hub Containers

ミュージック+ビデオハブコンテナー アプリケーション内でビデオや音楽のメディアコンテナーを作成したときにそのコンテナーの内容が更新されているか確認します。

Music + Video Hub Content

ミュージック+ビデオコンテンツ 不要なコンテンツがミュージック+ビデオハブに含まれていないか確認します。

Music + Video Hub Iconography Rules

ミュージック+ビデオハブ画像ルール ミュージック+ビデオの画像などの表示が規定されたルール通りに表示されているか確認します。

Initial Launch Functionality

初期起動機能 音楽再生中にアプリケーションを起動するときに、停止させたりしないか確認します。

Configurable Functionality

構成可能な機能(メディア機能) アプリケーション起動中に音楽プレイヤーの音量等を設定できることを確認します。

Applications that Play a Video or Audio Segment

ビデオまたはオーディオの部分を再生するアプリケーション アプリケーションが音楽再生のレジューム状態に影響を与えていないことを確認します。

SoundEffect and Background Music

効果音とBGM 音楽再生中にアプリケーションを起動したときにBGMや効果音が重ならないか確認します。

Applications That Extend The Picture Viewer: Functionality

Pictureハブの拡張アプリケーション:機能 アプリケーションがPictureハブの写真を操作できるか確認します。

Applications That Extend The Picture Viewer: Launch Behaviors

Pictureハブの拡張アプリケーション:起動反応 Pictureハブの【アプリケーション】メニューからアプリケーションが起動できるか確認します。

Applications That Extend The Picture Viewer: Photo Manipulation

Pictureハブの拡張アプリケーション:写真操作 Pictureハブから選択した写真をアプリケーションで操作できるか確認します。

Applications That Extend the Share Picker: Functionality

Share Picker拡張アプリケーション:機能 アプリケーションから写真がアップロードできるか確認します。

Photo Sharing Application Launch Behavior

写真共有アプリケーション:起動反応 Pictureハブの【共有】メニューからアプリケーションが起動し、写真をアップロードできるか確認します。

Primary Application Functionality

Pictureハブ拡張アプリケーション:主要機能 アプリケーションの主要な機能にカメラまたは写真に関連しているか確認します。

User Initiated Background Audio

ユーザー主導のバックグランド再生 バックグランド再生できるアプリケーションは、UI操作によりバックグラウンド再生を開始できるか確認します。

Stopping Background Audio

バックグラウンド再生の停止 バックグランド再生できるアプリケーションは、UI操作によりバックグラウンド再生を停止できるか確認します。

Universal Volume Control Commands

ボリューム操作 ボリューム操作に影響がないことを確認します。

Universal Volume Control Strings

ボリューム表示エリア 音楽再生中にアプリケーションを終了しても、音楽が再生を続け、ボリューム表示部に音楽のメタデータが表示されることを確認します。

Background Audio Streaming Agent

バックグラウンドオーディオストリーミングエージェント アプリケーションのストリーミング再生が正しいデータとメタデータを管理できているか確認します。

User-Initiated Background Transfers

ユーザー起動によるバックグラウンド転送 バックグラウンド転送が始まるか確認します。

Status of Background Transfers

バックグラウンド転送の状態 バックグラウンド転送の状態を確認できるUIがあることと、UIで操作できることを確認します。

Cancelling Background Transfers

バックグラウンド転送のキャンセル バックグランド転送がキャンセルできることを確認します。

Windows Phone アプリ開発の一助になれば幸いです。

2011年10月25日火曜日

Windows Phoneのテーマに関連したリソースを取得する。

Windows Phoneのテーマに関連した情報を引き出すにはどうしたら良いのか分からなかったので、Microsoft MVP for Deveice Application Development のCH3COOH(酢酸)センセイに訊いてみました。

酢酸センセイがこのように取得できますよと教えてくれたのが、次のブログエントリにあるようなコード。
http://ch3cooh.jp/index.php/tips/windowsphone7/system/resources/

要はResources[“要素名”]をキャストして代入ってことみたいなので、他の要素はどうなってるかなと思って調べたら、次のMSDNライブラリを見つけました。

Theme Resources for Windows Phone
http://msdn.microsoft.com/en-us/library/ff769552(v=VS.92).aspx

Windows Phoneアプリで苦労するのは、テーマが変更されたときにアプリが違和感なく表示されるかどうかです。画像とかも意外にテーマを変更したら画像が見えなくなったとかあります。テーマのチェックする際には、Resource[“要素名”]を忘れずに。

2011年10月11日火曜日

ページ遷移時のメソッドを整理する。

Windows Phoneのアプリの動作遷移に関しては、以前エントリで紹介しました。

アプリ起動と終了のイベントに関して整理してみる。

今回は、Windows PhoneアプリのActivatedイベントとDeactivatedイベントの間で発生するメソッドを整理したいと思います。overrideしておくと、ページ遷移の時に必ずコールされるようになるメソッドがあります。それが以下の3つのメソッドです。

  1. OnNavigatedFromメソッド
    このメソッドは、起動しているアプリケーションからDeactivatedイベントが発行される間に行われます。
  2. OnNavigatingFromメソッド
    このメソッドは、OnNavigatedFromメソッドよりも前に行われるメソッドです。
  3. OnNavigatedToメソッド
    このメソッドはOnNavigatedFromとは逆で、他のアプリケーションから自分のアプリケーションが戻るときのActivatedイベントが発行される間に行われます。

これらのメソッドの使い所としては、主にテンポラリ等のデータの保存処理と保存したデータの読み出し処理が多くなるかと思います。Windows Phoneアプリは、基本的に意図的に保存処理を記述しない限りデータや設定は保存されない仕組みです。そのため、Windowsボタンでホームに戻ったり、別のアプリケーションに遷移した場合は、アプリケーションがアクティブになったときに設定が保存されていないと、初期状態に戻ったりします。
それを防ぐために上記メソッド内で保存が必要な設定等の保存/読み出し処理を記述しておく必要があります。

イメージの制御で意外にこれで躓いたりしましたので、参考になればと思います。

2011年8月28日日曜日

「SketchFlow Template for Windows Phone」をExpression Blend日本語版から選択できるようにする。

Windows Phone SDK RC版が公開されて数日が経過しました。
皆さんも早速日本語対応等に追われてるかと思います。

今回はWindows Phoneアプリ開発で使えるExpression Blend用テンプレートとして、Windows Phone用のSketchFlowが作れる「SketchFlow Template for Windows Phone」があります。
http://wp7sketchflow.codeplex.com/

しかし、このテンプレートExpression Blend英語版でないと、インストールしても新規プロジェクト一覧で表示されません。

そこで、Expression Blend日本語版から新規プロジェクト一覧で表示するようにするには、以下のテンプレートフォルダからファイルを日本語用フォルダにコピーすることで表示できるようになります。

  • C:\Program Files (x86)\Microsoft Expression\Blend 4\ProjectTemplates\en\CSharp\WindowsPhone
    csWindowsPhonePrototype.zip
  • C:\Program Files (x86)\Microsoft Expression\Blend 4\Templates\en\CSharp\WindowsPhone
    SketchFlowCompScreen.zip
    SketchFlowNavScreen.zip

コピー先のフォルダは、上記で赤字にしているenjaに書き換えたフォルダにコピーしてください。
すると、新規プロジェクトでテンプレート一覧から「SketchFlow Template for Windows Phone」が選択できるようになっているはずです。

SketchFlowForWindowsPhone

SketchFlowは、画面遷移の設計などで役に立つテンプレートです。ぜひご活用ください。

2011年7月30日土曜日

アプリ起動と終了のイベントに関して整理してみる。

以前、「Windows Phoneのアプリケーションを強制的に終了させる。」という記事の中でアプリケーション起動のイベントに書いてみました。
もう少しこの辺の説明が必要かなと思いましたので、書いておきたいと思います。

アプリケーションの起動と終了には、以下の4種類のイベントが用意されています。

  1. Lauching
  2. Closing
  3. Activated
  4. Deactivated

これらのイベントは、それぞれ以下のようなタイミングでコールされます。

  1. Lauching
    アプリケーション一覧やショートカットタイルから起動したときに呼ばれるイベント。
    このイベントは1回しか呼ばれない。
  2. Closing
    【戻る】ボタンを押して、アプリケーションを終了するときに呼ばれるイベント。
    このイベントは1回しか呼ばれない。
  3. Activated
    他のアプリケーションからアプリケーションが復帰したときに呼ばれるイベント。
    このイベントは、復帰するたびに呼ばれる。
  4. Deactivated
    【戻る】ボタンの長押しや【Windows】ボタンを押したりして、一時的にアプリケーションを退避させたときに呼ばれるイベント。
    このイベントは、退避するたびに呼ばれる。

図というか、フローで表すとこんな感じです。

image

Windows PhoneアプリケーションのテンプレートにあるApp.xaml.csに上記イベントのメソッドが、すでに定義されていますので、実際に動かしてみて確認されてもよいかと思います。
この辺の動作は、アプリケーション申請でも厳しく見られるようなので注意していきましょう。

2011年7月18日月曜日

WPアプリケーションの強制終了に関する注意事項

昨日、アプリケーションを強制終了させる方法について記載しました。
この方法については、日本MSエバンジェリストの高橋忍さんが注意事項をブログで紹介されています。

開始画面以外では Back ボタンでアプリケーションを終了させるべきではない
http://blogs.msdn.com/b/shintak/archive/2011/07/17/10187268.aspx

本来、「はじめの画面でバックボタンを押した時にアプリケーションを終了させる」というのがWindows Phoneの操作ガイドラインにあります。強制終了という手順は、本来の操作から外れた行為になるのでよろしくないですよ、ということですね。

開発者として、ガイドラインを守るというのも大切なことになります。
不具合の調査などに個人の使用のみに留めるなど、配慮が必要でしょう。

アプリがノンアクティブになった場合や、逆にアクティブになったときに初期化する必要がある場合は、その都度初期化するようにイベントにコーディングする必要があると思います。

2011年7月17日日曜日

Windows Phoneのアプリケーションを強制的に終了させる。

アプリケーションを終了させる方法として、Windows Phoneアプリケーションでは、基本的に「終了させたいアプリケーションの最初のコンテンツでバックボタンを押すこと」により終了します。

ですが、アプリケーションの種類によっては「メニューから終了させたい」とか「バックボタンを押したらすぐに終了させたい」なんて仕様もあるかと思います。
ですが、Windows PhoneのSilverlightアプリケーションは基本的に何もしなければ履歴としてメモリ上に残ります。その証拠にバックボタンを長押しすると、アプリケーションの履歴が表示されて自分のアプリケーションが表示されていることが分かるかと思います。
この場合はどうすれば良いのか、この場合はアプリケーションを終了させるメソッドを用意する必要があります。

バックボタンを押した時に終了させる方法は、MSエバンジェリストの高橋忍さんがブログにてコードを紹介されています。こちらのコードをご覧になるのが一番参考になるかと思います。
http://blogs.msdn.com/b/shintak/archive/2011/07/16/10187146.aspx

要点は以下の点を把握しておく必要があります。

  • App.xaml.csに終了用のメソッドを用意します。
    このメソッドが、各コンテンツから終了させるためのものとなります。
  • 終了用のメソッドでは専用のExceptionを発行するようにします。
    この場合はQuitExceptionのように分かりやすい例外名を定義しておくと良いです。
  • ハンドルされていないExceptionはApplication_UnhandledExceptionメソッドが呼ばれます。
    このメソッドでExceptionをチェックし、該当の例外ならreturnさせます。
  • バックボタンが押されたかをアプリケーション上でチェックするには、overrideして、以下のメソッドを定義する必要があります。メソッドの定義はintellisenseが自動的に作成してくれます。
    protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
    このメソッドを定義して、その中に条件を設定するなりして、終了用メソッドをコールするようにします。

また、併せてテンプレートで生成されるapp.xaml.csの以下の定義がどのようなタイミングでコールされるか、把握しておくと良いでしょう。

  • Application_Launching
    アプリケーションが起動するときにコールされます。
  • Application_Activated
    アプリケーションがアクティブになったときにコールされます。
  • Application_Deactivated
    アプリケーションから別のアプリケーションに切り替える時(バックボタンの長押し時)にコールされます。
  • Application_Closing
    アプリケーションが終了するときにコールされます。
  • Application_UnhandledException
    アプリケーション内でハンドルされていない例外がスローされたときにコールされます。

このあたりの処理は、アプリケーションを詰めていくと処理を記述する必要が出てくるようになると思います。

2011年7月16日土曜日

Windows Phone 開発向けのブログを開設しました。

すでに記事は「とある個人事業主のシステム開発メモ」というところで公開しているのですが、Windows Phone専門でこちらでも公開するようにしたいと思います。

主にライブラリの使い方とか、Blendとの連携とかを公開できれば良いかなぁと思っています。