61
WindowsPhone7 もわりといいと おもうのです スマートフォン勉強会@九州 2011/02/05 tmyt

スマートフォン勉強会@九州

  • Upload
    shigure

  • View
    628

  • Download
    0

Embed Size (px)

Citation preview

Page 1: スマートフォン勉強会@九州

WindowsPhone7 もわりといいと おもうのです スマートフォン勉強会@九州

2011/02/05 tmyt

Page 2: スマートフォン勉強会@九州

こんにちは!

• tmyt/つもゆた っていいます。

• だいたい大学院生をやっています。

• WindowsMobileシリーズに一途です。

• Azureaとか作ってます。

• C++担当です。

• ARMのアセンブラは一般教養です!

Page 3: スマートフォン勉強会@九州

本日のお題

• 11/8にアメリカでついに発売したWindows Phone 7

• 国内でも買ったよ!という声がちらほら…

• 買った方はすでに感じていると思いますが 開発してても え、できないの? のオンパレード。

• じゃぁ結局何ができるのさ!!!

• Silverlightだからこそできる!を中心に見ていきましょう!

Page 4: スマートフォン勉強会@九州

できること見る前にこっちからいきましょう

Page 5: スマートフォン勉強会@九州

WindowsPhone7でできなくなったこと

• タスクを並列して2個以上同時に実行すること

• ネイティブコードを実行すること

• 実行中にコードを書き換えること

• 変数に代入した機械語を実行すること

• 他人のプロセスをフックしていろいろすること

• ファイルシステムへアクセスすること

• システムDLLをP/Invokeしていろいろすること

• などなど。変態的なことは基本的にできません

Page 6: スマートフォン勉強会@九州

現時点でできないこと

• OSグローバルな日本語入力

• こぴぺ

• リアルタイムなカメラ映像の参照

• エミュレータ上でのLiveIDの設定

• エミュレータ上でのメールアカウントの設定

Page 7: スマートフォン勉強会@九州

できるようになったこと!

Page 8: スマートフォン勉強会@九州

できるようになったこと

• 加速度センサへのアクセス

• DeepZoomの利用

• 4点以上のマルチタッチ

• Silverlightを使用したアプリケーション開発

• PushNotificationの利用

• 統合されたロケーション情報へのアクセス

Page 9: スマートフォン勉強会@九州

従来のWindowsMobileとの違い

• 外部の情報へのアクセスにTaskを使用

• 写真を撮るも開くも、アドレス帳から選択してくるのもみんな同じ手順で利用可能に

• タスクが殺される前にコンテキストの保存をしないといけなくなった

• 開発がSilverlightになったのでXAMLをいじらないといけなくなった

• XNAが使えるようになった

• Silverlight+XNAのキメラもできます!

Page 10: スマートフォン勉強会@九州

新しくなったユーザインターフェース

• PivotやPanoramaといったMetro UI

• もちろんユーザアプリケーションも利用できます

• Hubからはじまるオペレーション

• People,Game,Music+Video,Photo,Office…

• シンプルで大きなコントロール

Page 11: スマートフォン勉強会@九州

新しくなった開発フロー

• Blendでデザイン

• UIの配置

• アニメーションの作成

• VisualStudioでコードの実装

• アプリケーションのデバッグ

• マーケットプレイスへの配信

Page 12: スマートフォン勉強会@九州

開発する上での注意

• XAPは400MBまで

• マーケットプレイスを経由していないアプリケーションは10個まで

• UIスレッドをブロックするコードは書けません

• Unlockできる端末は3台まで

• Etc…

Page 13: スマートフォン勉強会@九州

UI設計がとても楽に

• Expression Blendでぽとぺた開発

• XAMLを直接かいてもOK

• アニメーションや画面遷移がC#のコード無しで実装できます

• エミュレータでみたりしながらPhone7のUIをみていきましょう

Page 14: スマートフォン勉強会@九州

様々なTask

使用例1

Page 15: スマートフォン勉強会@九州

いろいろなものを開くTask

• アプリケーションからデータにアクセスする場合はTaskを経由しなければなりません。

• Taskはこんなのが用意されています • CameraCaptureTask • EMailAddressChooserTask • EmailComposseTask • MarketplaceDetailTask • MarketplaceSearchTask • PhoneCallTask • PhoneNumberChooserTask • PhotoChooserTask • SaveEmailAddressTask • SavePhoneNumberTask • SearchTask • SmsComposeTask • WebBrowserTask

Page 16: スマートフォン勉強会@九州

Taskを使用する際の注意点

• Taskを呼び出すにはShow関数を呼びます

• Taskを呼び出すと自分のアプリケーションは終了されます

• Taskから帰ってくると自分のアプリケーションが再度起動します。

• その際にCompletedイベントにハンドラを設定した直後にハンドラが呼び出されます。

• Loadedイベントでイベントハンドラを設定するのがおすすめ

• エミュレータで実行するとタスクから戻ってくると30秒程度待ち時間があるのでその間にデバッグを再度実行しましょう

Page 17: スマートフォン勉強会@九州

CameraCaptureTask

• カメラを起動して画像を入力

• WMでいうところのCameraCaptureDialog

• C++だとSHCameraCapture

• 撮影した写真は保存されません

Page 18: スマートフォン勉強会@九州

PhotoChooserTask

• 保存されている画像ファイルを読み込むために使用します

Page 19: スマートフォン勉強会@九州

WebBrowserTask

• Webブラウザを起動します

• URLを指定するとそのURLを開いてくれます

• &を含むURLを開けません

• バグです

Page 20: スマートフォン勉強会@九州

Pivot/Panorama

使用例2

Page 21: スマートフォン勉強会@九州

Pivot

• WMでいうところのタブコントロールのようなもの

• タブページ間に強いつながりが無い場合に使う

•左右フリックでページ切り替え

• かっこいい

Page 22: スマートフォン勉強会@九州

Panorama

• Pivotよりページ間のつながりが強い

• ページは1枚の大きい横長の一部が表示される

• フリックでゆるやかにページ切り替え

• かっこいい

Page 23: スマートフォン勉強会@九州

ロケーション

使用例3

Page 24: スマートフォン勉強会@九州

WMでのロケーション

• GPSのみ

• Intermidiate Driverが仮想化してくれていた

• 基地局測位は自分でがんばるしかない

• PHSだとCOM叩きますよね

• 3GだとRILのCE向けAPIを叩きます

• 叩いた後GoogleのAPIとかに投げると経度緯度に変換してくれたり

• いろいろ大変でした。

Page 25: スマートフォン勉強会@九州

WP7でのロケーション

• とても楽になりました。

• .NET 4のロケーションAPIと互換

• つまりWindows7のロケーションAPIと互換

• GPSを扱えます

• 基地局測位もあつかえます

• Wifi測位も使えるかもしれません

• 全部まとめて1つのインターフェースで提供されます

• 位置検出デバイスを指定できないのがちょっと残念

Page 26: スマートフォン勉強会@九州

コードで書くとこんな感じ

public partial class Location { GeoCoordinateWatcher geo; public Location() { geo = new GeoCoordinateWatcher(); geo.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(geo_PositionChanged); } void geo_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e) { // いろいろ } }

Page 27: スマートフォン勉強会@九州

DeepZoom

使用例4

Page 28: スマートフォン勉強会@九州

DeepZoomって?

• Deep Zoom は、高解像度のイメージをインタラクティブに表示できる機能です。アプリケーションのパフォーマンスに影響を及ぼさずにすばやく、イメージをズームインしたりズームアウトしたりできます。Deep Zoom では、複数解像度のイメージを用意し、スプリング アニメーションを使用することによって、滑らかな読み込みとパンを可能にしています。 • http://msdn.microsoft.com/ja-jp/library/cc645050(VS.95).aspx

• つまりGoogleMapのWebみたいなのをやるコントロールです

Page 29: スマートフォン勉強会@九州

とりあえず使ってみる

• Deep Zoom Composerで画像を分割、XMLを生成

• VSのプロジェクトに追加

• MultiScaleImageコントロールを配置

• Sourceにxmlのパスを設定

• とりあえずこれだけ書けば使えます。

Page 30: スマートフォン勉強会@九州

動的に画像をダウンロードする…?

• 画像キャッシュを自分で書かなくていい

• らくちん!

• 解像度に応じた画像を動的にダウンロードするということは…

Page 31: スマートフォン勉強会@九州

こういうこともできました

Page 32: スマートフォン勉強会@九州

MultiScaleTileSource

• MultiScaleImageにXMLを指定した場合、DeepZoom用に生成したXMLでないとエラーになりました。

• さっきのアプリはもちろんDeepZoom用にXMLは作られていません

• このクラスを実装したクラスをImageSourceに指定することで画像のダウンロードをカスタマイズできます

Page 33: スマートフォン勉強会@九州

マルチタッチ

使用例5

Page 34: スマートフォン勉強会@九州

WP7のマルチタッチ

• Silverlightのマルチタッチです。

• つまりWindows7のマルチタッチと互換です。

• Touch.FrameReported イベントにハンドラを書いておくとマルチタッチイベントが捕捉できます。

• ピンチイン・ピンチアウトの検出などの気の利いた機能はありません

• 自分で書いたりしましょう

Page 35: スマートフォン勉強会@九州

Silverlght+XNA

使用例6

Page 36: スマートフォン勉強会@九州

XNAのクラスをSilverlightから

• XNAのクラスをSilverlightから呼べます!

• SoundEffectクラスや、Music+Vide Hubへアクセスする機能はXNA側なのでそういった機能を呼び出す場合はXNA側を利用します

Page 37: スマートフォン勉強会@九州

日本語入力を実現してみる

使用例7

Page 38: スマートフォン勉強会@九州

日本人の最大の悩み

• そう、それは、日本語入力

• WMではATOKとかインストールしてましたね

• Windows Phone 7では日本での発売が未定なのもあるのかIMEは実装されていません

• 今後実装されるでしょう!

• でもいま日本語入力が使いたい!とおもうのはしかたないこと。

• 悲しくも僕たちはデベロッパなのでIMEを作るかという発想にいたるわけです…

Page 39: スマートフォン勉強会@九州

しかたないので作りました。

Page 40: スマートフォン勉強会@九州

せっかくなので

• コントロールにしました。

• 組み込むだけで日本語入力が使えます!

Page 41: スマートフォン勉強会@九州

こんなかんじ

Page 42: スマートフォン勉強会@九州

実装

• 裏でSocialIMEを叩いてます

• 文節の調整はサポートしてません

• だれかやって!

• エディットコントロールが2枚重なってます

• ローマ字変換は自前のテーブルです!

• http://d.hatena.ne.jp/tmyt/

• ここで配布してます!

Page 43: スマートフォン勉強会@九州

フリック入力!

• id:kaorun 氏によって開発されたUtakata

• なんとPhone7でフリック入力ができます

• アプリケーションに組み込むと日本語入力ができるアプリケーションの完成

• ソースツリーが公開されているのでid:kaorun 氏に感謝して使いましょう

Page 44: スマートフォン勉強会@九州

Silverlight for Windows Phone 7 Toolkit

番外編

Page 45: スマートフォン勉強会@九州

便利な拡張があります

• Silverlight for Windows Phone 7 Toolkit(長い

• これを使うとあらゆる面倒なことが一瞬で片付きます

• たとえば…

• ピンチイン ピンチアウト

• 画面遷移のトランジション

• コンボボックスのようなもの

• などなど…

Page 46: スマートフォン勉強会@九州

かけあしで見てきましたが

• WindowsPhone7はSilverlightでできることがほとんどすべてできます

• 表現力もiOSやAndroidに負けないぐらい高まりました

• 国内の発売が楽しみですね!

Page 47: スマートフォン勉強会@九州

ご清聴ありがとうございました

Page 48: スマートフォン勉強会@九州

できないことをできるようにしてしまう

番外編その2

Page 49: スマートフォン勉強会@九州

P/Invoke

• P/Invokeはできませんが無理すればできます。

• COMInteropという裏技があります。

• これをつかうとマーケットの認証が通りません。

• でもOSにネイティブコードでフルアクセスできます。

• Microsoft.InteropServices.dll が必要なので XDA-Developers どこかでげっとしましょう

Page 50: スマートフォン勉強会@九州

カメラへリアルタイムアクセス

• 残念ながらカメラのリアルタイムアクセスは提供されていません。

• が、実は実装されています。

• でも端末メーカにしかAPIが提供されていません。

• しかたないのでほげると

• Microsoft.Phone.Media.Extended にいろいろあります。

• VideoCameraクラスとかを触ると実はリアルタイムキャプチャできます。

• DLLはXDA-Developers どこかでげっとしてきましょう

Page 51: スマートフォン勉強会@九州

COM経由でのネイティブコード

• ネイティブコード呼び出しでレジストリやファイルシステムに直接アクセスができます。

• これをすることでPhone7が.NET VMという檻に閉じ込められていたのがその外部に出ることができるのです。

• Phone7のハードウェアはQualcomm Snapdragon 1GHz以上またはそれ相応のCPUという条件があります。

• つまりARMv7なのでAdvanced SIMD拡張が利用できるわけです。

• すこしわくわくしますよね

Page 52: スマートフォン勉強会@九州

ARMv7でどきどきする

• Advanced SIMD 拡張だと Add128_32 ; load first operand vldr.64 d0, [r0] vldr.64 d1, [r0, #8] ; load second operand vldr.64 d2, [r1] vldr.64 d3, [r1, #8] ; Add operands vqadd.s16 q0, q0, q1 ; save result vqneg.s16 q0, q0 veor q0, q0 vstr.64 d0, [r2] vstr.64 d1, [r2, #8] ; return mov pc, lr

Page 53: スマートフォン勉強会@九州

ARMv7対応はCE7から…

• CTP版のWindowsEmbeddedCompact7にarmasmが入ってるので活用しましょう!

• Advanced SIMD拡張めちゃめちゃはやいです。

• iPhoneも3GSから使えるのでアセンブラでチューニングするにはおすすめ!

• AndroidはNDKでやっちゃえばOK!

Page 54: スマートフォン勉強会@九州

生のOSが見えると楽しい

• やっぱり生のOSが見えてなんぼです。

• iPhoneはJBしてgcc いれて。

• AndroidはNDKでNative Activity であそんで。

• Phone7はCOM InteropでNative コード叩いて。

• そんなこといってたら id:iseebi に

• 「生のOS見えるとやる気出すよね」 とか言われました

Page 55: スマートフォン勉強会@九州

ご清聴ありがとうございました

Page 56: スマートフォン勉強会@九州

WMの人がiPhone買った

番外編3

Page 57: スマートフォン勉強会@九州

iPhone買いました

• なんかえぶりばでーキャンペーンやってたので買いました。

• シンプルオレンジプラン一括なので2年契約じゃないのでもうそろそろMNPします。

Page 58: スマートフォン勉強会@九州

結局なにに使ってる?

• ついったー

• foursquare

• IRC

Page 59: スマートフォン勉強会@九州

iPhone電話じゃない

• パケット通信無効にしてます

• 全部Docomoのモバイルルータ経由

• たまにしか発信しない

• メールアドレス誰にも教えてない

• 電話帳はExchange

• ただの情報への出入り口

Page 60: スマートフォン勉強会@九州

iPhoneはサブディスプレイ!

• iPhoneはサブディスプレイ!

• とかいうと怒られそうです。

• WindowsMobileってブラウザ微妙なんです。

• なので、UDPでiPhoneにURL送ってSafariで開くあぷりを書きました。

• サブディスプレイです。

Page 61: スマートフォン勉強会@九州

ご清聴ありがとうございました