Upload
shigure
View
628
Download
0
Embed Size (px)
Citation preview
WindowsPhone7 もわりといいと おもうのです スマートフォン勉強会@九州
2011/02/05 tmyt
こんにちは!
• tmyt/つもゆた っていいます。
• だいたい大学院生をやっています。
• WindowsMobileシリーズに一途です。
• Azureaとか作ってます。
• C++担当です。
• ARMのアセンブラは一般教養です!
本日のお題
• 11/8にアメリカでついに発売したWindows Phone 7
• 国内でも買ったよ!という声がちらほら…
• 買った方はすでに感じていると思いますが 開発してても え、できないの? のオンパレード。
• じゃぁ結局何ができるのさ!!!
• Silverlightだからこそできる!を中心に見ていきましょう!
できること見る前にこっちからいきましょう
WindowsPhone7でできなくなったこと
• タスクを並列して2個以上同時に実行すること
• ネイティブコードを実行すること
• 実行中にコードを書き換えること
• 変数に代入した機械語を実行すること
• 他人のプロセスをフックしていろいろすること
• ファイルシステムへアクセスすること
• システムDLLをP/Invokeしていろいろすること
• などなど。変態的なことは基本的にできません
現時点でできないこと
• OSグローバルな日本語入力
• こぴぺ
• リアルタイムなカメラ映像の参照
• エミュレータ上でのLiveIDの設定
• エミュレータ上でのメールアカウントの設定
できるようになったこと!
できるようになったこと
• 加速度センサへのアクセス
• DeepZoomの利用
• 4点以上のマルチタッチ
• Silverlightを使用したアプリケーション開発
• PushNotificationの利用
• 統合されたロケーション情報へのアクセス
従来のWindowsMobileとの違い
• 外部の情報へのアクセスにTaskを使用
• 写真を撮るも開くも、アドレス帳から選択してくるのもみんな同じ手順で利用可能に
• タスクが殺される前にコンテキストの保存をしないといけなくなった
• 開発がSilverlightになったのでXAMLをいじらないといけなくなった
• XNAが使えるようになった
• Silverlight+XNAのキメラもできます!
新しくなったユーザインターフェース
• PivotやPanoramaといったMetro UI
• もちろんユーザアプリケーションも利用できます
• Hubからはじまるオペレーション
• People,Game,Music+Video,Photo,Office…
• シンプルで大きなコントロール
新しくなった開発フロー
• Blendでデザイン
• UIの配置
• アニメーションの作成
• VisualStudioでコードの実装
• アプリケーションのデバッグ
• マーケットプレイスへの配信
開発する上での注意
• XAPは400MBまで
• マーケットプレイスを経由していないアプリケーションは10個まで
• UIスレッドをブロックするコードは書けません
• Unlockできる端末は3台まで
• Etc…
UI設計がとても楽に
• Expression Blendでぽとぺた開発
• XAMLを直接かいてもOK
• アニメーションや画面遷移がC#のコード無しで実装できます
• エミュレータでみたりしながらPhone7のUIをみていきましょう
様々なTask
使用例1
いろいろなものを開くTask
• アプリケーションからデータにアクセスする場合はTaskを経由しなければなりません。
• Taskはこんなのが用意されています • CameraCaptureTask • EMailAddressChooserTask • EmailComposseTask • MarketplaceDetailTask • MarketplaceSearchTask • PhoneCallTask • PhoneNumberChooserTask • PhotoChooserTask • SaveEmailAddressTask • SavePhoneNumberTask • SearchTask • SmsComposeTask • WebBrowserTask
Taskを使用する際の注意点
• Taskを呼び出すにはShow関数を呼びます
• Taskを呼び出すと自分のアプリケーションは終了されます
• Taskから帰ってくると自分のアプリケーションが再度起動します。
• その際にCompletedイベントにハンドラを設定した直後にハンドラが呼び出されます。
• Loadedイベントでイベントハンドラを設定するのがおすすめ
• エミュレータで実行するとタスクから戻ってくると30秒程度待ち時間があるのでその間にデバッグを再度実行しましょう
CameraCaptureTask
• カメラを起動して画像を入力
• WMでいうところのCameraCaptureDialog
• C++だとSHCameraCapture
• 撮影した写真は保存されません
PhotoChooserTask
• 保存されている画像ファイルを読み込むために使用します
WebBrowserTask
• Webブラウザを起動します
• URLを指定するとそのURLを開いてくれます
• &を含むURLを開けません
• バグです
Pivot/Panorama
使用例2
Pivot
• WMでいうところのタブコントロールのようなもの
• タブページ間に強いつながりが無い場合に使う
•左右フリックでページ切り替え
• かっこいい
Panorama
• Pivotよりページ間のつながりが強い
• ページは1枚の大きい横長の一部が表示される
• フリックでゆるやかにページ切り替え
• かっこいい
ロケーション
使用例3
WMでのロケーション
• GPSのみ
• Intermidiate Driverが仮想化してくれていた
• 基地局測位は自分でがんばるしかない
• PHSだとCOM叩きますよね
• 3GだとRILのCE向けAPIを叩きます
• 叩いた後GoogleのAPIとかに投げると経度緯度に変換してくれたり
• いろいろ大変でした。
WP7でのロケーション
• とても楽になりました。
• .NET 4のロケーションAPIと互換
• つまりWindows7のロケーションAPIと互換
• GPSを扱えます
• 基地局測位もあつかえます
• Wifi測位も使えるかもしれません
• 全部まとめて1つのインターフェースで提供されます
• 位置検出デバイスを指定できないのがちょっと残念
コードで書くとこんな感じ
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) { // いろいろ } }
DeepZoom
使用例4
DeepZoomって?
• Deep Zoom は、高解像度のイメージをインタラクティブに表示できる機能です。アプリケーションのパフォーマンスに影響を及ぼさずにすばやく、イメージをズームインしたりズームアウトしたりできます。Deep Zoom では、複数解像度のイメージを用意し、スプリング アニメーションを使用することによって、滑らかな読み込みとパンを可能にしています。 • http://msdn.microsoft.com/ja-jp/library/cc645050(VS.95).aspx
• つまりGoogleMapのWebみたいなのをやるコントロールです
とりあえず使ってみる
• Deep Zoom Composerで画像を分割、XMLを生成
• VSのプロジェクトに追加
• MultiScaleImageコントロールを配置
• Sourceにxmlのパスを設定
• とりあえずこれだけ書けば使えます。
動的に画像をダウンロードする…?
• 画像キャッシュを自分で書かなくていい
• らくちん!
• 解像度に応じた画像を動的にダウンロードするということは…
こういうこともできました
MultiScaleTileSource
• MultiScaleImageにXMLを指定した場合、DeepZoom用に生成したXMLでないとエラーになりました。
• さっきのアプリはもちろんDeepZoom用にXMLは作られていません
• このクラスを実装したクラスをImageSourceに指定することで画像のダウンロードをカスタマイズできます
マルチタッチ
使用例5
WP7のマルチタッチ
• Silverlightのマルチタッチです。
• つまりWindows7のマルチタッチと互換です。
• Touch.FrameReported イベントにハンドラを書いておくとマルチタッチイベントが捕捉できます。
• ピンチイン・ピンチアウトの検出などの気の利いた機能はありません
• 自分で書いたりしましょう
Silverlght+XNA
使用例6
XNAのクラスをSilverlightから
• XNAのクラスをSilverlightから呼べます!
• SoundEffectクラスや、Music+Vide Hubへアクセスする機能はXNA側なのでそういった機能を呼び出す場合はXNA側を利用します
日本語入力を実現してみる
使用例7
日本人の最大の悩み
• そう、それは、日本語入力
• WMではATOKとかインストールしてましたね
• Windows Phone 7では日本での発売が未定なのもあるのかIMEは実装されていません
• 今後実装されるでしょう!
• でもいま日本語入力が使いたい!とおもうのはしかたないこと。
• 悲しくも僕たちはデベロッパなのでIMEを作るかという発想にいたるわけです…
しかたないので作りました。
せっかくなので
• コントロールにしました。
• 組み込むだけで日本語入力が使えます!
こんなかんじ
実装
• 裏でSocialIMEを叩いてます
• 文節の調整はサポートしてません
• だれかやって!
• エディットコントロールが2枚重なってます
• ローマ字変換は自前のテーブルです!
• http://d.hatena.ne.jp/tmyt/
• ここで配布してます!
フリック入力!
• id:kaorun 氏によって開発されたUtakata
• なんとPhone7でフリック入力ができます
• アプリケーションに組み込むと日本語入力ができるアプリケーションの完成
• ソースツリーが公開されているのでid:kaorun 氏に感謝して使いましょう
Silverlight for Windows Phone 7 Toolkit
番外編
便利な拡張があります
• Silverlight for Windows Phone 7 Toolkit(長い
• これを使うとあらゆる面倒なことが一瞬で片付きます
• たとえば…
• ピンチイン ピンチアウト
• 画面遷移のトランジション
• コンボボックスのようなもの
• などなど…
かけあしで見てきましたが
• WindowsPhone7はSilverlightでできることがほとんどすべてできます
• 表現力もiOSやAndroidに負けないぐらい高まりました
• 国内の発売が楽しみですね!
ご清聴ありがとうございました
できないことをできるようにしてしまう
番外編その2
P/Invoke
• P/Invokeはできませんが無理すればできます。
• COMInteropという裏技があります。
• これをつかうとマーケットの認証が通りません。
• でもOSにネイティブコードでフルアクセスできます。
• Microsoft.InteropServices.dll が必要なので XDA-Developers どこかでげっとしましょう
カメラへリアルタイムアクセス
• 残念ながらカメラのリアルタイムアクセスは提供されていません。
• が、実は実装されています。
• でも端末メーカにしかAPIが提供されていません。
• しかたないのでほげると
• Microsoft.Phone.Media.Extended にいろいろあります。
• VideoCameraクラスとかを触ると実はリアルタイムキャプチャできます。
• DLLはXDA-Developers どこかでげっとしてきましょう
COM経由でのネイティブコード
• ネイティブコード呼び出しでレジストリやファイルシステムに直接アクセスができます。
• これをすることでPhone7が.NET VMという檻に閉じ込められていたのがその外部に出ることができるのです。
• Phone7のハードウェアはQualcomm Snapdragon 1GHz以上またはそれ相応のCPUという条件があります。
• つまりARMv7なのでAdvanced SIMD拡張が利用できるわけです。
• すこしわくわくしますよね
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
ARMv7対応はCE7から…
• CTP版のWindowsEmbeddedCompact7にarmasmが入ってるので活用しましょう!
• Advanced SIMD拡張めちゃめちゃはやいです。
• iPhoneも3GSから使えるのでアセンブラでチューニングするにはおすすめ!
• AndroidはNDKでやっちゃえばOK!
生のOSが見えると楽しい
• やっぱり生のOSが見えてなんぼです。
• iPhoneはJBしてgcc いれて。
• AndroidはNDKでNative Activity であそんで。
• Phone7はCOM InteropでNative コード叩いて。
• そんなこといってたら id:iseebi に
• 「生のOS見えるとやる気出すよね」 とか言われました
ご清聴ありがとうございました
WMの人がiPhone買った
番外編3
iPhone買いました
• なんかえぶりばでーキャンペーンやってたので買いました。
• シンプルオレンジプラン一括なので2年契約じゃないのでもうそろそろMNPします。
結局なにに使ってる?
• ついったー
• foursquare
• IRC
iPhone電話じゃない
• パケット通信無効にしてます
• 全部Docomoのモバイルルータ経由
• たまにしか発信しない
• メールアドレス誰にも教えてない
• 電話帳はExchange
• ただの情報への出入り口
iPhoneはサブディスプレイ!
• iPhoneはサブディスプレイ!
• とかいうと怒られそうです。
• WindowsMobileってブラウザ微妙なんです。
• なので、UDPでiPhoneにURL送ってSafariで開くあぷりを書きました。
• サブディスプレイです。
ご清聴ありがとうございました