SlideShare une entreprise Scribd logo
1  sur  29
Télécharger pour lire hors ligne
OpenNETCFを使ってデバイス制御
~ Windows Mobile meet OpenNETCF ~


                    CH3COOH(酢酸)
OpenNETCFとデバイス制御
~ .NET Compact Framework meet OpenNETCF ~



                        CH3COOH(酢酸)
お詫び
• デバイス制御分を多めに考えていましたが、
  原稿を落としたので一部内容を変更してお送
  り致します
自己紹介
• CH3COOH(酢酸) です
• 会計システムと戦っているプログラマ(?)
• 1円単位のお金の調整する
  簡単なお仕事を毎日終電までしてます
• Windows Mobile超可愛いです
• WM6.5端末が発売されるのが今から楽しみ
  です(但し、イーモバイルに限る)
Windows Mobileとは
• Windows CEをベースにした
  携帯電話とPDA向けのプラットフォーム
• 「スマートフォン」と呼ばれる分野の代表格

• 今日はWindows MobileでOpenNETCFから
  デバイスを制御したりするお話をします
Windows Mobile端末に
      搭載されているデバイス
• カメラ
• GPS
• Bluetooth
• 赤外線
• 無線LAN
• 加速度センサ
• バイブレータ
Windows Mobile以外の
     スマートフォン搭載デバイス
• HTC HT-03A(Android)
  – カメラ、無線LAN、Bluetooth、GPS、加速度センサ
• Apple iPhone 3GS
  – カメラ、無線LAN、Bluetooth、GPS、加速度センサ


• 各種端末で大体同じデバイスが載ってる!
Windows Mobileアプリの種類

• ネイティブ(C++)
  – 特定のCPUやOS向けに作られるアプリ
  – Windows MobileだとTodayとか
• Widget(WM6.5~)
  – HTMLとJavaScriptで作るアプリ
  – Windows Mobile 6.5からの新機能
• .NET Compact Framework
  – .NET Frameworkのサブセット
    VB.NETやC#で開発が出来ます
.NET Compact Frameworkで
    サポートされているデバイス
• カメラ
• GPS
• BlueTooth
• 赤外線
• 無線LAN
• 加速度センサ
• バイブレータ
.NET Compact Frameworkからの
        デバイス制御
• .NET Compact Frameworkで、
  未サポートのデバイスを使用するには、
  Win32APIをP/Invokeで呼び出します
• ここではバイブレータを使用するための
  サンプルコードをご紹介します
P/Invokeを使った
                   長~~~いコード(1)
• バイブレータを制御するNLed APIを
  使うのでP/Invokeの定義を行います

Public Class Led

    <DllImport("coredll.dll", SetLastError:=True)> _
    Private Shared Function NLedGetDeviceInfo(ByVal h As UInteger, _
                                ByRef pOutput As NLED_COUNT_INFO) As Boolean
    End Function

    <DllImport("coredll.dll", SetLastError:=True)> _
    Private Shared Function NLedSetDevice(ByVal h As UInteger, _
                              ByRef pOutput As NLED_SETTINGS_INFO) As Boolean
    End Function

    Private Const NLED_COUNT_INFO_ID As UInteger = 0
    Private Const NLED_SETTINGS_INFO_ID As UInteger = 2
P/Invokeを使った
           長~~~いコード(2)
• さきほど定義したNled APIに
  渡す構造体を定義します

  Private Structure NLED_SETTINGS_INFO
     Public LedNum As UInteger
     Public OffOnBlink As Integer
     Public TotalCycleTime As Long
     Public OnTime As Long
     Public OffTime As Long
     Public MetaCycleOn As Integer
     Public MetaCycleOff As Integer
  End Structure

   Private Structure NLED_COUNT_INFO
      Public cLeds As UInteger
   End Structure
P/Invokeを使った
               長~~~いコード (3)
  Public Shared Function GetLedCount() As Integer
    Dim info As New NLED_COUNT_INFO()
    Dim LEDCount As Integer = 0
    If NLedGetDeviceInfo(NLED_COUNT_INFO_ID, info) Then
        LEDCount = CInt(info.cLeds)
    End If
    Return LEDCount
  End Function

  Public Shared Sub SetLedStatus(ByVal ledID As Integer, _
                                 ByVal status As Integer)
     Dim info As New NLED_SETTINGS_INFO()
     With info
       .LedNum = System.Convert.ToUInt32(ledID)
       .OffOnBlink = System.Convert.ToUInt16(status)
     End With
     NLedSetDevice(NLED_SETTINGS_INFO_ID, info)
  End Sub
End Class
P/Invokeを使った
            長~~~いコード (4)
• バイブレートさせるための定義が終わったので、
  ようやくバイブをさせることが出来ます

  Private Sub Button2_Click(ByVal sender As System.Object, _
                            ByVal e As System.EventArgs) _
                            Handles Button2.Click

    ' バイブレーション開始
    LedVibrate.SetLedStatus(1, 1)

    ' 2秒間鳴動させた後、バイブを停止する
    System.Threading.Thread.Sleep(2000)
    LedVibrate.SetLedStatus(1, 0)

  End Sub
OpenNETCFのあるとき

• OpenNETCF.orgのSmart Device Frameworkを
  使えば、面倒な定義が不要になります
• OpenNETCF.WindowsCE.dllを参照し、
  バイブさせるサンプルコードを書いてみました。
OpenNETCFを使った
             短くシンプルなコード
Private Sub Button1_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) _
                          Handles Button1.Click

  ' バイブレーション開始
  Dim led As New OpenNETCF.WindowsCE.Notification.Led()
  led.SetLedStatus(1, OpenNETCF.WindowsCE.Notification.Led.LedState.On)

  ' 2秒間鳴動させた後、バイブを停止する
  System.Threading.Thread.Sleep(2000)
  led.SetLedStatus(1, OpenNETCF.WindowsCE.Notification.Led.LedState.Off)

End Sub




• これだけ。
OpenNETCFとは
• .NET Compact Frameworkから
  Windows Mobileを使いやすくする為の
  SharedSource Licenseのクラスライブラリ
OpenNETCFのライセンス形態
• OpenNETCF Shared Source License
  を採用しています
• ソースコードを自分のアプリに組み込まなけ
  れば、無料で使うことができます
• 自分のアプリに組み込んで使う場合は、ライ
  センスを購入する必要があります
他にOpenNETCFで何が出来るの?

• 無線機能の有効・無効化
• LEDの点灯・消灯
• Vibraterの振動
• マイクを使って録音
• etc etc…
無線機能の有効・無効化
• OpenNETCF.WindowsMobile名前空間
• BluetoothRadio クラス
  – Bluetoothデバイスの制御を行います
 ‘ Bluetooth端末を有効にする
 bt.RadioState = OpenNETCF.WindowsMobile.RadioState.On


• WiFiRadio クラス
  – 無線LANデバイスの制御を行います
• PhoneRadio クラス
  – 電話機能の制御を行います
LEDの点灯・消灯
• OpenNETCF.WindowsCE.Notification
  名前空間
• Led クラス
  – LEDの点灯を行ったり、LEDの情報を取得します
 ‘ ID2のLEDを点灯させます
 Dim led As New OpenNETCF.WindowsCE.Notification.Led()
 led.SetLedStatus(2, OpenNETCF.WindowsCE.Notification.Led.LedState.On)



  – バイブレータに振られているIDを指定することで、
    このLEDクラスでもバイブさせる事が出来ます
バイブレータの振動
• OpenNETCF.WindowsMobile名前空間
• Vibrateクラス
  – バイブレータの制御を行います

 ' バイブレート開始
 OpenNETCF.WindowsMobile.Vibrate.Play()

 ' バイブレート停止
 OpenNETCF.WindowsMobile.Vibrate.Stop()
マイクを使って録音
• OpenNETCF.Media.WaveAudio名前空間
• Recorderクラス
    – 音声の録音を行います
‘ 録音を開始する
audioRecorder = new OpenNETCF.Media.WaveAudio.Recorder()
audioRecorder.RecordFor(
         System.IO.File.OpenWrite(filePath),_
         10000, _
         OpenNETCF.Media.WaveAudio.SoundFormats.Stereo16bit44kHz)

' 録音を停止する
audioRecorder.Stop()
もっと何か出来ないの?
• .NET CFで削られているクラスがある!
 – FtpWebRequest クラス
   • OpenNETCF.Net.Ftp 名前空間
 – SmtpCredential クラス
   • OpenNETCF.Net.Mail 名前空間
• 同じく削られたイベントやメソッドも復活!
 – Combobox2
 – Clipboard2
   • OpenNETCF.Windows.Forms 名前空間
もっともっと何か出来ないの!?
• やっぱり携帯電話だから・・・
• 発着信履歴取得
 – Phone クラス
   • OpenNETCF 名前空間
• RSSを読む処理は案外面倒・・・
 – FeedEngine クラスなど
   • OpenNETCF.Rss 名前空間
デバイスを活用した
     ソリューションの提案
• GPSを使った営業支援システム
 – GPSロガーで経路を記録して、
   そのまま営業日報として配信
• カメラを使った出張買取サービス
 – 車の出張買取サービスで査定情報の入力や
   キズなどを撮影したデータを本部に配信
まとめ


  デバイスの制御は面倒くさい!

  .NET CFからのデバイスの制御は
       もっと面倒くさい!!

OpenNETCFを使ってもっと本質の部分に
リソースを投入してみては如何でしょうか
最後に
• Windows Mobile CF プログラミング Tips
 – http://ch3cooh.jp/tips/wm/
 – CFのサンプルコードやP/Invokeを使ったデバイ
   スの操作に関するTipsなどを掲載しています
• スマートフォン勉強会
 – http://smartphone.techtalk.jp/
 – スマートフォン全般の使い方や、アプリケーション
   の開発手法をみんなで学んでいく勉強会です
 – 大阪は奇数月、東京では偶数月に開催してます
• ご清聴ありがとうございました

Contenu connexe

Plus de Kenji Wada

20110212 Silverlight から Bing Maps に触れる
20110212 Silverlight から Bing Maps に触れる20110212 Silverlight から Bing Maps に触れる
20110212 Silverlight から Bing Maps に触れるKenji Wada
 
Windows Phone 7 についてGdgd話すよ
Windows Phone 7 についてGdgd話すよWindows Phone 7 についてGdgd話すよ
Windows Phone 7 についてGdgd話すよKenji Wada
 
Windows PhoneについてGdgd話すよ Rev 2
Windows PhoneについてGdgd話すよ Rev 2Windows PhoneについてGdgd話すよ Rev 2
Windows PhoneについてGdgd話すよ Rev 2Kenji Wada
 
Windows PhoneについてGdgd話すよ
Windows PhoneについてGdgd話すよWindows PhoneについてGdgd話すよ
Windows PhoneについてGdgd話すよKenji Wada
 
Windows MobileとWeb Api
Windows MobileとWeb ApiWindows MobileとWeb Api
Windows MobileとWeb ApiKenji Wada
 
今更Web Apiにハマりました
今更Web Apiにハマりました今更Web Apiにハマりました
今更Web ApiにハマりましたKenji Wada
 
Windows Mobile de Hello World
Windows Mobile de Hello World Windows Mobile de Hello World
Windows Mobile de Hello World Kenji Wada
 
Design Wave Magazine 2008年5月号附録基板を使った お手軽加速度センサプログラミング
Design Wave Magazine 2008年5月号附録基板を使った お手軽加速度センサプログラミングDesign Wave Magazine 2008年5月号附録基板を使った お手軽加速度センサプログラミング
Design Wave Magazine 2008年5月号附録基板を使った お手軽加速度センサプログラミングKenji Wada
 

Plus de Kenji Wada (8)

20110212 Silverlight から Bing Maps に触れる
20110212 Silverlight から Bing Maps に触れる20110212 Silverlight から Bing Maps に触れる
20110212 Silverlight から Bing Maps に触れる
 
Windows Phone 7 についてGdgd話すよ
Windows Phone 7 についてGdgd話すよWindows Phone 7 についてGdgd話すよ
Windows Phone 7 についてGdgd話すよ
 
Windows PhoneについてGdgd話すよ Rev 2
Windows PhoneについてGdgd話すよ Rev 2Windows PhoneについてGdgd話すよ Rev 2
Windows PhoneについてGdgd話すよ Rev 2
 
Windows PhoneについてGdgd話すよ
Windows PhoneについてGdgd話すよWindows PhoneについてGdgd話すよ
Windows PhoneについてGdgd話すよ
 
Windows MobileとWeb Api
Windows MobileとWeb ApiWindows MobileとWeb Api
Windows MobileとWeb Api
 
今更Web Apiにハマりました
今更Web Apiにハマりました今更Web Apiにハマりました
今更Web Apiにハマりました
 
Windows Mobile de Hello World
Windows Mobile de Hello World Windows Mobile de Hello World
Windows Mobile de Hello World
 
Design Wave Magazine 2008年5月号附録基板を使った お手軽加速度センサプログラミング
Design Wave Magazine 2008年5月号附録基板を使った お手軽加速度センサプログラミングDesign Wave Magazine 2008年5月号附録基板を使った お手軽加速度センサプログラミング
Design Wave Magazine 2008年5月号附録基板を使った お手軽加速度センサプログラミング
 

Dernier

Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????blackmambaettijean
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 

Dernier (20)

Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 

OpenNETCFとデバイス制御 ~ .NET Compact Framework meet OpenNETCF ~

  • 2. OpenNETCFとデバイス制御 ~ .NET Compact Framework meet OpenNETCF ~ CH3COOH(酢酸)
  • 3. お詫び • デバイス制御分を多めに考えていましたが、 原稿を落としたので一部内容を変更してお送 り致します
  • 4. 自己紹介 • CH3COOH(酢酸) です • 会計システムと戦っているプログラマ(?) • 1円単位のお金の調整する 簡単なお仕事を毎日終電までしてます • Windows Mobile超可愛いです • WM6.5端末が発売されるのが今から楽しみ です(但し、イーモバイルに限る)
  • 5. Windows Mobileとは • Windows CEをベースにした 携帯電話とPDA向けのプラットフォーム • 「スマートフォン」と呼ばれる分野の代表格 • 今日はWindows MobileでOpenNETCFから デバイスを制御したりするお話をします
  • 6. Windows Mobile端末に 搭載されているデバイス • カメラ • GPS • Bluetooth • 赤外線 • 無線LAN • 加速度センサ • バイブレータ
  • 7. Windows Mobile以外の スマートフォン搭載デバイス • HTC HT-03A(Android) – カメラ、無線LAN、Bluetooth、GPS、加速度センサ • Apple iPhone 3GS – カメラ、無線LAN、Bluetooth、GPS、加速度センサ • 各種端末で大体同じデバイスが載ってる!
  • 8. Windows Mobileアプリの種類 • ネイティブ(C++) – 特定のCPUやOS向けに作られるアプリ – Windows MobileだとTodayとか • Widget(WM6.5~) – HTMLとJavaScriptで作るアプリ – Windows Mobile 6.5からの新機能 • .NET Compact Framework – .NET Frameworkのサブセット VB.NETやC#で開発が出来ます
  • 9. .NET Compact Frameworkで サポートされているデバイス • カメラ • GPS • BlueTooth • 赤外線 • 無線LAN • 加速度センサ • バイブレータ
  • 10. .NET Compact Frameworkからの デバイス制御 • .NET Compact Frameworkで、 未サポートのデバイスを使用するには、 Win32APIをP/Invokeで呼び出します • ここではバイブレータを使用するための サンプルコードをご紹介します
  • 11. P/Invokeを使った 長~~~いコード(1) • バイブレータを制御するNLed APIを 使うのでP/Invokeの定義を行います Public Class Led <DllImport("coredll.dll", SetLastError:=True)> _ Private Shared Function NLedGetDeviceInfo(ByVal h As UInteger, _ ByRef pOutput As NLED_COUNT_INFO) As Boolean End Function <DllImport("coredll.dll", SetLastError:=True)> _ Private Shared Function NLedSetDevice(ByVal h As UInteger, _ ByRef pOutput As NLED_SETTINGS_INFO) As Boolean End Function Private Const NLED_COUNT_INFO_ID As UInteger = 0 Private Const NLED_SETTINGS_INFO_ID As UInteger = 2
  • 12. P/Invokeを使った 長~~~いコード(2) • さきほど定義したNled APIに 渡す構造体を定義します Private Structure NLED_SETTINGS_INFO Public LedNum As UInteger Public OffOnBlink As Integer Public TotalCycleTime As Long Public OnTime As Long Public OffTime As Long Public MetaCycleOn As Integer Public MetaCycleOff As Integer End Structure Private Structure NLED_COUNT_INFO Public cLeds As UInteger End Structure
  • 13. P/Invokeを使った 長~~~いコード (3) Public Shared Function GetLedCount() As Integer Dim info As New NLED_COUNT_INFO() Dim LEDCount As Integer = 0 If NLedGetDeviceInfo(NLED_COUNT_INFO_ID, info) Then LEDCount = CInt(info.cLeds) End If Return LEDCount End Function Public Shared Sub SetLedStatus(ByVal ledID As Integer, _ ByVal status As Integer) Dim info As New NLED_SETTINGS_INFO() With info .LedNum = System.Convert.ToUInt32(ledID) .OffOnBlink = System.Convert.ToUInt16(status) End With NLedSetDevice(NLED_SETTINGS_INFO_ID, info) End Sub End Class
  • 14. P/Invokeを使った 長~~~いコード (4) • バイブレートさせるための定義が終わったので、 ようやくバイブをさせることが出来ます Private Sub Button2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles Button2.Click ' バイブレーション開始 LedVibrate.SetLedStatus(1, 1) ' 2秒間鳴動させた後、バイブを停止する System.Threading.Thread.Sleep(2000) LedVibrate.SetLedStatus(1, 0) End Sub
  • 15. OpenNETCFのあるとき • OpenNETCF.orgのSmart Device Frameworkを 使えば、面倒な定義が不要になります • OpenNETCF.WindowsCE.dllを参照し、 バイブさせるサンプルコードを書いてみました。
  • 16. OpenNETCFを使った 短くシンプルなコード Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles Button1.Click ' バイブレーション開始 Dim led As New OpenNETCF.WindowsCE.Notification.Led() led.SetLedStatus(1, OpenNETCF.WindowsCE.Notification.Led.LedState.On) ' 2秒間鳴動させた後、バイブを停止する System.Threading.Thread.Sleep(2000) led.SetLedStatus(1, OpenNETCF.WindowsCE.Notification.Led.LedState.Off) End Sub • これだけ。
  • 17. OpenNETCFとは • .NET Compact Frameworkから Windows Mobileを使いやすくする為の SharedSource Licenseのクラスライブラリ
  • 18. OpenNETCFのライセンス形態 • OpenNETCF Shared Source License を採用しています • ソースコードを自分のアプリに組み込まなけ れば、無料で使うことができます • 自分のアプリに組み込んで使う場合は、ライ センスを購入する必要があります
  • 20. 無線機能の有効・無効化 • OpenNETCF.WindowsMobile名前空間 • BluetoothRadio クラス – Bluetoothデバイスの制御を行います ‘ Bluetooth端末を有効にする bt.RadioState = OpenNETCF.WindowsMobile.RadioState.On • WiFiRadio クラス – 無線LANデバイスの制御を行います • PhoneRadio クラス – 電話機能の制御を行います
  • 21. LEDの点灯・消灯 • OpenNETCF.WindowsCE.Notification 名前空間 • Led クラス – LEDの点灯を行ったり、LEDの情報を取得します ‘ ID2のLEDを点灯させます Dim led As New OpenNETCF.WindowsCE.Notification.Led() led.SetLedStatus(2, OpenNETCF.WindowsCE.Notification.Led.LedState.On) – バイブレータに振られているIDを指定することで、 このLEDクラスでもバイブさせる事が出来ます
  • 22. バイブレータの振動 • OpenNETCF.WindowsMobile名前空間 • Vibrateクラス – バイブレータの制御を行います ' バイブレート開始 OpenNETCF.WindowsMobile.Vibrate.Play() ' バイブレート停止 OpenNETCF.WindowsMobile.Vibrate.Stop()
  • 23. マイクを使って録音 • OpenNETCF.Media.WaveAudio名前空間 • Recorderクラス – 音声の録音を行います ‘ 録音を開始する audioRecorder = new OpenNETCF.Media.WaveAudio.Recorder() audioRecorder.RecordFor( System.IO.File.OpenWrite(filePath),_ 10000, _ OpenNETCF.Media.WaveAudio.SoundFormats.Stereo16bit44kHz) ' 録音を停止する audioRecorder.Stop()
  • 24. もっと何か出来ないの? • .NET CFで削られているクラスがある! – FtpWebRequest クラス • OpenNETCF.Net.Ftp 名前空間 – SmtpCredential クラス • OpenNETCF.Net.Mail 名前空間 • 同じく削られたイベントやメソッドも復活! – Combobox2 – Clipboard2 • OpenNETCF.Windows.Forms 名前空間
  • 25. もっともっと何か出来ないの!? • やっぱり携帯電話だから・・・ • 発着信履歴取得 – Phone クラス • OpenNETCF 名前空間 • RSSを読む処理は案外面倒・・・ – FeedEngine クラスなど • OpenNETCF.Rss 名前空間
  • 26. デバイスを活用した ソリューションの提案 • GPSを使った営業支援システム – GPSロガーで経路を記録して、 そのまま営業日報として配信 • カメラを使った出張買取サービス – 車の出張買取サービスで査定情報の入力や キズなどを撮影したデータを本部に配信
  • 27. まとめ デバイスの制御は面倒くさい! .NET CFからのデバイスの制御は もっと面倒くさい!! OpenNETCFを使ってもっと本質の部分に リソースを投入してみては如何でしょうか
  • 28. 最後に • Windows Mobile CF プログラミング Tips – http://ch3cooh.jp/tips/wm/ – CFのサンプルコードやP/Invokeを使ったデバイ スの操作に関するTipsなどを掲載しています • スマートフォン勉強会 – http://smartphone.techtalk.jp/ – スマートフォン全般の使い方や、アプリケーション の開発手法をみんなで学んでいく勉強会です – 大阪は奇数月、東京では偶数月に開催してます