はつねの日記

Kinect, Windows 10 UWP, Windows Azure, IoT, 電子工作

HVC-C SDK for Xamarin.Androidを公開しました。

nugetにHVC-C SDK for Xamarin.Android v1.2.2を公開しました。

 

HVC-Cとは

HVC-Cはオムロンさから発売されている顔認識センサーデバイスです。多人数のセンシングにも対応しており、クラス全体や打ち合わせ、舞台から客席の表情認識などにも使えるようなデバイスです。

HVC-C

 

公式SDK

公式SDKは、iOS版とAndroid版があります。また、ソースも公開されています。


OmronSensingEggProject/HVC-C1B_SDK-Android ・ GitHub

 

HVC-C SDK for Xamarin.Android

しかし、残念ながら現時点でWindows版やXamarin版がありませんでした。

そこで、公開されているソースからXamarin.Android版を作成してnugetに登録しました。


NuGet Gallery | OMRON HVC-C SDK for Xamarin.Android 1.2.3

 

nugetですので、Visual Studioから簡単に導入できます。

image

 

また、Githubにソースも公開しています。


hatsunea/HVC-C1B_SDK-Android ・ GitHub

 

HVC-C SDK for Xamarin.Androidを使ったサンプル

今回公開したSDKを使ったサンプルプログラムもGitHubに公開しました。


hatsunea/HVC-C1B_SimpleDemo-Android ・ GitHub

こちらのサンプルではnugetからSDKを取得していますので下記の手順で動作可能になります。

  1. ダウンロード
  2. ダウンロードしたzipのプロパティで[ブロックの解除]
  3. zipを任意のフォルダに展開
  4. Visual Studioで開く
  5. プロジェクトエクスプローラーでプロジェクトを右クリックしてnugetを開いてSDKをダウンロード

 

なお、もちろん、Visual Studio 2013 Community Editionでも動作します。

 

今後の展開

HVC-C SDK for Xamarin.Androidのソースを見て頂くとわかるように、Core部分とXamarin.Andoid依存部分を分離しています。

今後は、Xamarin.iOS依存部分、WinRT依存部分、WindowsPhone依存部分を作成して

を提供予定です。

もし、反響が大きければ優先順位を上げて開発しなくちゃね!

Human Sensing Frontier Award #01ソリューション部門グランプリを受賞しました

Human Sensing Frontier Award #01のソリューション部門で「Selfie & Coffee」が選ばれました。

http://plus-sensing.omron.co.jp/egg-project/award_top/award01/

ありがとうございます。

副賞に「追加HVC-C提供」という選択肢があるので、追加提供をお願いしてそれを前提にアプリ作ってみようかと思っています。

OPCはOlympus AIRになります!

テスターに選ばれてHack中のOPCが3/6にOlympus AIRとして製品版発売になったとニュースリリースでました。
http://www.olympus.co.jp/jp/news/2015a/nr150205opcj.jsp

オリンパスさんのサイトでは発売記念キャンペーンの販売予約が始まっています。
https://shop.olympus-imaging.jp/product/select/catcd/2313

なんか、わくわく感が止まらない。

 

製品発売決まっていないものでもアンテナにピピッときたものを先行して開発できるのは開発者としてすごくうれしい。でも、それが製品発売となるとなんだか更にうれしくなりますね。

moff x TMCN

ハッカソン発祥のmoffと飲み会発祥のTMCNが組み合わさると何か楽しいことができるかもということでコラボ始まりました。

P2030014

 

例えば、moff manとか!

P2030018

 

今後の動きにご期待ください。

何か楽しいことが起こりそうだ!とピピッとメディアの方がいらっしゃったらぜひTMCN事務局までコンタクトください!

Xamarin.AndroidにHVC-C SDKを移植

現在、オムロンさんのHVC-Cベータ版モニターに参加しています。
何かアプリをつくらないといけないのですが、それよりもVisual Studioでアプリを構築できるように集中しちゃった結果がこれです。
 
もちろん正統派なEclipse + ADTでJavaというのもやってはみたんですよ。
 
 
でもなんとなーくやってみたらbluetoothの検出とかXamarin.Androidでさくっとできてしまったので、これはSDKのXamarin用をつくらないといかないかなーと。
WP_20141213_001
 
で、SDK本体の方は素直に移植したんですが、MainActivity.java(つまりSDKを呼び出すサンプルアプリ側)が難しいwww
試行錯誤して色々調整して、async/awaitに少しSDKを書き直したら動き始めました。
 

 

一応は動きましたがSDKの内部構造をちゃんとasync/await使った非同期待ち合わせやTask使った非同期実行にすることで、受信データの待ち合わせループとか最小化してCPU使わないようにできそうなのでもう少しだけブラッシュアップしようかと思います。

でも時間が…

サンプルアプリの代わりのXamarin.AndroidSDKを提出でもいいですか?wwww

Xamarin.Androidで地図を使う

Google Maps Android API v2を利用できるようにする
Androidアプリ署名用キーストアからフィンガープリントを取得

コマンドプロンプトでkeytoolを起動しAndroidアプリ署名用キーストアからフィンガープリントを取得します。以下の説明では、デバッグ用のキーストアであるdebug.keystoreからフィンガープリントを取得する方法を説明しています。

アルファ版やベータ版を含めてストア登録して配布するためにはデバッグ用キーストアではなく、この時点で正式なAndroidアプリ署名用キーストアを指定します【作り方は次回)。

 

"C:\Program Files (x86)\Java\jdk1.6.0_39\bin\keytool.exe" ?list -v -keystore "C:\Users\hatsune\AppData\Local\Xamarin\Mono for Android\debug.keystore" -alias androiddebugkey -storepass android
-keypass android
別名: androiddebugkey
作成日: 2014/03/02
エントリタイプ: PrivateKeyEntry
証明連鎖の長さ: 1
証明書[1]:
所有者: CN=Android Debug, O=Android, C=US
発行者: CN=Android Debug, O=Android, C=US
シリアル番号: 5312ba0d
有効期間の開始日: Sun Mar 02 13:56:45 JST 2014 終了日: Fri May 29 13:56:45 JST 2
043
証明書のフィンガープリント:
         MD5:  A7:DC:■■:■■:■■:■■:■■:■■:■■:■■:■■:■■:■■:■■:■■:01
         SHA1: 67:5A:■■:■■:■■:■■:■■:■■:■■:■■:■■:■■:■■:■■:■■:■■:■■:■■:■■:0F
         署名アルゴリズム名: SHA1withRSA
         バージョン: 3
Google Developers Centerに作成するアプリ用のProjectを作成

image

Google Developers Consoleにログインして、[Create Project]ボタンをクリックします。

 

image

Project名を指定します。Project IDは自動的に生成されます。

image

 

APIの有効化

プロジェクト名をクリックしてoverviewを表示します。

image

[Enable an API]ボタンをクリックしてAPIリストを表示します。

 

「Maps」で絞り込んで、「Google Maps Android API v2」の行を見つけたら[OFF]ボタンをクリックしてSTATUSを[ON]にします。これでGoogle Maps Android API v2が有効になりました。

image

 

APIキーを取得する

[APIs & auth]-[Credentials]メニューを選択し、[Publis API access]にある[Create new Key]ボタンをクリックします。

image

 

Create a new key画面で[Android key]ボタンをクリックしてAndroid Keyの作成を開始します。

image

 

「keytoolで作成したSHA1フィンガープリント」+「;」+「パッケージ名」を入力してから[Create]ボタンをクリックします。

image

APIキーが表示されるので、これをAndroidManifest.xmlに転記します。

AndroidManifest.xmlの設定

image

Required Permissionsで次のものを選択します。

  • ACCESS_COARSE_LOCATION (GPS非利用時は指定不要)
  • ACCESS_FINE_LOCATION(GPS非利用時は指定不要)
  • ACCESS_MOCK_LOCATION(GPS非利用時は指定不要)
  • ACCESS_NETWORK_STATE
  • ACCESS_WIFI_STATE
  • INTERNET
  • WRITE_EXTERNAL_STORAGE

この状態でAndroidManifest.xamlは次のような内容になっています。

<?xml version="1.0" encoding="utf-8"?>
<manifest package="jp.hatsunejournal.AEDSearch" xmlns:android="http://schemas.android.com/apk/res/android" android:installlocation="auto" android:versioncode="1" android:versionname="1.0.1">
  <uses-sdk android:targetsdkversion="19" />
  <application android:icon="@drawable/Icon" android:label="AED検索">
  </application>
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
  <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</manifest>

あとは直接ファイルを開いて変更します。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="auto" package="jp.hatsunejournal.AEDSearch" android:versionCode="1" android:versionName="1.0.1">
  <uses-sdk android:targetSdkVersion="19" />
  <application android:label="AED検索" android:icon="@drawable/Icon">
    <!-- APIキーの設定 -->
    <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="AIzaSyCbwVTZ_mpWOVvnI3vke75QD9ZnheiMfCA" />
    <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
    <!-- -->
  </application>
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
  <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  
  <!-- 権限の追加 -->
  <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
  
  <!-- OpenGL ESの設定-->
  <uses-feature android:glEsVersion="0x00020000" android:required="true"/>
</manifest>

 

必要なAndroid SDKのインストール確認

今回はAndroid 4.2.2 (API17)をターゲットとしてアプリを作成します。4.2.2以外に、Google Play servicesなど必要なライブラリをAndroid SDK Mangerで導入しておきましょう。

image

Xamarin.Forms.Mapsコンポーネントの環境設定
Nugetでの導入

NugetでXamarin.Forms.Mapsを追加したら、必ず更新プログラムを確認して必要なライブラリを最新化します。

image

app.configの設定(2014年11月現在)

2014年11月現在の状況では、Xamarin.Forms.Maps導入後にapp.configにバージョン互換性の設定を行う必要があります。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Net.Primitives" culture="neutral" publicKeyToken="b03f5f7f11d50a3a" />
        <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <dependentAssembly>
        <assemblyIdentity name="System.Net.Http.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.2.28.0" newVersion="4.2.28.0" />
      </dependentAssembly>
    </assemblyBinding>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
コンパイルエラーの解消

ドキュメントやネット上の情報ではここまでやれば環境整備が完了と思っていましたが、実際にビルドすると

Unzipping failed. Please download 
https://dl-ssl.google.com/android/repository/google_play_services_5089000_r19.zip
 and extract it to the 
C:\User\Project\dotNET2013\WinRT\AEDSearchXamarin\packages\Xamarin.GooglePlayServices.19.0.0.1\lib\MonoAndroid23\19\content
 directory.

というようにunzipできないというエラーが発生して、unzipできないためにzipファイルの中身が電解できずに「google-play-services_lib/libs/google-play-services.jar」がないというビルドエラーが発生してしまい、ビルドできません。

これはzipファイルには実際に必要なjarファイル以外にもjavaファイルなど必須ではないファイルも含まれているのですが、この必須ではないファイルのフォルダ構造が深いためにパス名が長くなってしまいunzipできないという状態になっています。

 

そこで、zipファイルを取得して、それを所定の位置「<プロジェクトルート>\packages\Xamarin.GooglePlayServices.19.0.0.1\lib\MonoAndroid23\19\content」フォルダにフォルダ構造を維持して手作業で展開します。このときも同様にエラーが発生しますが、jarファイルだけ展開できればいいので、不必要なファイルの展開エラーは無視します。

 

これで再度ビルドすれば無事ビルド完了となります。

エミュレーターでの地図表示

image

現在、Android SDK、Genymotion、Xamarin Android Playerなどのエミュレーターのそれぞれの最新版の中でGoogle Play Serviceまで導入できて地図も表示できるのはXamarin Android Playerのようです。このあたりは、エクセルソフトの田淵さんのblogに詳しく載っています。

AED検索 for Androidもちゃんと地図が表示できます。

image

image

 

こんな感じでXamarin Formsで地図表示となるととても大変で、まだ本家のXAMLと比べると足りない点も多いのですが、ベータやアルファの状態を見るとこれからもXamarin Formsは拡充が続くようですので、最新動向に今後も注目していきたいと思います。

MVP Community Camp 2015東京会場

https://msevents.microsoft.com/cui/EventDetail.aspx?EventID=1032608669&culture=ja-JP

■日時:2015 年 1 月 31 日(土)13:00-17:50(受付開始:12:00)

■場所:日本マイクロソフト株式会社 セミナールーム

■スケジュール:
13:00 - 17:50 技術セッション(1 コマ / 50 分)
18:20 - 19:30 Happy Hour(懇親会)

 

実例枠の最初の時間枠で「使ってこそのテクノロジ。クロスプラットフォームAED 検索のキモ」ということで、Microsoft Azureを中核にして、universal Windows appsやXamarinなどを使ったクロスプラットフォーム開発の実例を紹介したいと思います。

試行錯誤の結果をご覧ください。