HOME > M300 SDK


M300スマートグラスについて
M300 Android OS
操作方法
UI デザイン ベストプラクティス
M300開発プロジェクトのはじめかた
 Android StudioへM300 SDKをインストール
 Android Studioで新しいM300プロジェクトの開始方法
 Android StudioでのSDK資料へのアクセス
バーコードSDKについて
 Intentを使う方法
 バーコードスキャナーをアプリに組み込む方法
 Raw Imageをスキャン
Voice SDKについて 近日公開
カメラ SDKについて 近日公開
タッチパッド SDKについて 近日公開

M300のファームウェア更新履歴はこちら

M300について

Vuzix M300は単眼のAndroidベースのウェアラブルコンピュータです。
M300はユーザーに素早くそして簡単にAndoridベースのアプリケーションを利用させることができ、ワークフローに関係する重要な情報にアクセスできることで、より効率的に業務を行うことができるようになり、同時に工程でのエラーを少なくすることもできます。
M300は頭に装着する目立たない形状をしていますが、標準的なAndroidスマートフォンで多くの能力を備えています。ハードウェアの性能は下記の通りです。

• 解像度:nHDフルカラーディスプレイ
• デュアルコアIntel Atomプロセッサー
• 2GB システムRAM
• 64GB 内部フラッシュストレージ
• 970万画素の静止画と1080p動画撮影可能。オートフォーカス、手ぶれ補正機能搭載
• 方位センサー(ジャイロスコープ、加速度センサー、地磁気センサー)
• 内側、外側の近接センサー
• 環境光センサー(外側)
• スピーカー(内側)
• デュアルノイズキャンセリングマイクロフォン
• 4つのAndroid標準操作ボタン
• 2軸タッチパッド
• ボイスコントロール(音声認識)

M300 Android OS

M300のAndroid OSは修正されたバージョン6.0.1で 部品やデバイスの能力を調整しています。
M300向けのアプリケーション開発をするには、Android SDKと、既存のAPIを拡張したM300 SDKを使います。
次のリストは、基本的な機能とAndroid SDKおよびM300 SDKについて示しています。

* カメラ(Camera) – android.hardware.Camera または android.hardware.Camera2
* センサー(Sensors) – SensorManager
* Bluetooth – BluetoothManager と BluetoothAdapter. 標準的なBluetoothとBLE(Bluetooth Low Energy)をサポート
* データベース(Database) – SQLite
* Google Cloud Messaging – Google Play Services Client Library 9.8.0 またはそれ以上
* 地図(Maps) – use Google Play Services Client Library 9.8.0 またはそれ以上
* 音声認識(Speech Recognition) – android.speech package (後日の提供となります)

M300のいくつかのコンポーネントには、デバイス固有のAPIを用いてアクセスします。
デバイス固有のAPIを提供するM300 SDKについては後ほど説明します。

操作方法

M300は従来のタッチスクリーンでのAndroidデバイスとは大幅に異なる操作方法を備えています。
そのため、このデバイスで実行するためのアプリケーションのユーザーインターフェイス(以下、UI)を設計する際には、いくつかの考慮事項を念頭におくことが特に重要となります。
タッチスクリーンでの操作を大いに活用している既存のアプリケーションでは、M300での利用は非常に困難です。
これは、タッチスクリーンUIがM300の操作では使用不可能な特定の画面座標をタップ入力することを活用しているためです。

音声認識

ボイスコマンドはワークフローを中断せざるを得ないデバイスの物理操作なしにユーザーに素早い制御と入力を提供できるので、多くの環境でM300を理想的に利用できます。
M300にはSensory社のエンジンを利用した音声認識機能が搭載されています。M300の音声認識エンジンの詳細については、音声APIの項目を参照してください。
アプリケーション内に代替エンジンを組み込んだことで、アプリケーションでの利用も可能となっています。

タッチパッド

M300には選択動作を行うためのダブルタップ(2度押し)ジェスチャー2軸タッチパッドが搭載されています。
スワイプジェスチャーは、水平スワイプを利用した左右のナビゲーションと垂直スワイプを使用した上下のナビゲーションを利用することができます。
ダブルタップジェスチャーはデバイスを操作するときに意図しない入力を避けるための選択動作に対してのみ利用されます。
タッチパッドはトラックボールデバイスとして実装されており、dispatchTrackballEvent() や onTrackballEvent() などの方法を利用して、タッチパッド動作による生データの読み込みや処理を行うことができます。
アプリケーションでトラックボール動作が使用できない場合には、予備策として、タッチパッドが標準Androidの方法で取得できるKEYCODE_DPAD イベントで行って下さい。
KEYCODE_DPAD イベントの詳細については下記のAndroidキーイベント文章を参照して下さい。
https://developer.android.com/reference/android/view/KeyEvent.html

UI設計のベストプラクティス

M300上で使用するアプリケーションのための優秀なユーザーインターフェイスの最も重要とされることは単純性です。
これは主に、M300の画面領域が限られているためですが、前述の項目で定義した操作方法の制約にも左右されます。

• 複雑なメニューシステムを避けて、インターフェイス要素を介した直線的な進行を使用することで、ユーザーがアプリケーションUIを操作するのに費やす時間を最小限に抑えることができます。
• 上下左右の簡単なUI要素の操作で、現在フォーカスしているUI要素がわかるような明確な視覚的指示をユーザーの提供してください。
• ユーザーが順序の個々の手順を実行するための単一の誘導指示など、特定の瞬間に表示される情報の量を、文脈上非常に関係性のあるものに制限して下さい。
• 複雑な図や回路図をユーザーに表示するのではなく、手元のタスクに直接関連する要素だけを表示するようにしてください。
• アプリケーションのインターフェイスを介してユーザーを進行させる代替法を活用することで、ユーザーがM300を物理的に操作する必要があるシナリオの頻度を最小限に抑えることができます。このための最善策は音声認識を活用することですが、バーコードスキャン、写真撮影またはその他の手順が完了したことを確認するための形式など、複数の対話に基づいてユーザーを次の画面へと自動的に誘導することによって実行することもできます。

フォーカス順序の管理

UI要素のフォーカス受理の順序を上書きするにはViewGroup.focusSearch(View focused, int direction).を上書きして下さい。
この方法は、現在フォーカスしているビューとフォーカスの移動方向の、2つのパラメーターを使用します。
現在のフォーカスおよび方向に基づいた次のフォーカスを受理するための特定ビューの表示ルールは、好きな者を実装できます。
特定のビューを表示しないことを選択した場合には、予備策としてsuper.focusSearch(focused, direction) を常に表示する必要があります。

https://developer.android.com/reference/android/view/ViewGroup.html#focusSearch(android.view.View, int)

M300プロジェクトのはじめかた

Android StudioでM300 SDKをインストール

1. Android Studioを起動して、SDK Managerを開く
2. "SDK Update Sites"タブをクリックする
3. [+]ボタンをクリックして、更新サイトを追加する
4. "Name"に M300 Update Site. と入力する
5. "URL"に https://www.vuzix.com/XXXXXXXXX/m300_addon.xml と入力して[OK]ボタンをクリック
6. "SDK Platforms"タブをクリックする
7. "Show Package Details"チェックボックスを選択する
8. スクロールして"Android 6.0 (Marshmallow)"の場所を確認する
9. "Vuzix M300 SDK"チェックボックスを選択する
10. "SDK Tools"タブをクリックする
11. スクロールして"Vuzix M300 Extras "チェックボックスを選択する
12. [OK]をクリックする
13. 2つの新しい項目のインストールを確認する
14. インストールの完了を許可する

M300向けプロジェクトの作成

1. Android Studioの起動画面で[Start a new Android Studio project]をクリックする。すでに他のプロジェクトが開かれている場合は、メニューから[File]->[New]->[New Project]を選択する
2. 作成するプロジェクトの情報を入力する
a. [Phone and Tablet]を選択する
b. 「Minimum SDK」には「API 23: Android 6.0 (Marshmallow)」を選択する
c. Activityの選択には「Add No Activity」を推奨しています
3. [Finish]をクリックする
4. 生成されたプロジェクトで、メニューから[choose File]->[Project Structure]を開く
5. モジュールの"app"をクリックして選択する
6. "Properties"タブの「Compile Sdk Version」を「Vuzix M300 SDK (API 23)」に変更する
7. [OK]をクリックする

Android StudioからSDKのドキュメントを参照する

M300 SDKをインストール後、Android SDKのホームディレクトリ下にドキュメントが格納されます。Android SDKのホームディレクトリの場所はお使いのコンピューターの設定や環境ごとに異なります。場所を確認するにはまず、Android Studio Projectを開いた状態でメニューから[File]->[Project Structure]を選択してダイアログを開きます。 "SDK location"をクリックすると、Android SDKのホームディレクトリ(Android SDK location)が表示されています。ドキュメントの実体は add-ons/addon-vuzixm300sdk-vuzix-23/docs にあります。

バーコードの読み取りSDK

Scanning via Intentを使う方法

アプリからバーコードを読み取るもっとも簡単な方法は、Intentを用いてバーコードスキャナーを呼び出すことです

import com.vuzix.sdk.barcode.ScannerIntent;
import com.vuzix.sdk.barcode.ScanResult;

private static final int REQUEST_CODE_SCAN = 0;

Intent scannerIntent = new Intent(ScannerIntent.ACTION);
startActivityForResult(scannerIntent, REQUEST_CODE_SCAN);


スキャン結果は onActivityResult() で得られます。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case REQUEST_CODE_SCAN:
if (resultCode == Activity.RESULT_OK) {
ScanResult scanResult = data.getParcelableExtra(ScannerIntent.RESULT_EXTRA_SCAN_RESULT);
// do something with scan result
}
return;
}
super.onActivityResult(requestCode, resultCode, data);


Intentに格納される extras についてもっと知りたければ、ScannerIntentのドキュメントを参照してください。

バーコードスキャナーをアプリに埋め込む方法

もしあなたがバーコードスキャナーを直接コントロールする必要があるなら、アプリに埋め込むことができます。
スキャナーのUIや、スキャンした映像にフィルター処理を行うなど、柔軟にカスタマイズできます。
Barcode SDKは、アプリにスキャナーを埋め込むための ScannerFragment を提供しています。
layout XMLの<fragment>タグで埋め込むか、FragmentManagerによって、Activityに追加することが出来ます。

例:

import com.vuzix.sdk.barcode.ScannerFragment;
import com.vuzix.sdk.barcode.ScanResult;
ScannerFragment scannerFragment = new ScannerFragment();
Bundle args = new Bundle();
// specify any scanner args here
scannerFragment.setArguments(args);
getFragmentManager().beginTransaction().replace(R.id.fragment_container, scannerFragment).commit();

ScannerFragmentでスキャンに成功した場合のコールバックは、リスナーを登録して得ることができます。
例:

scannerFragment.setListener(new ScannerFragment.Listener() {
@Override
public void onScanResult(Bitmap bitmap, ScanResult[] scanResults) {
// handle barcode scanning results
}
@Override
public void onError() {
// scanner fragment encountered a fatal error and will no longer provide results
}
});

ScannerFragmentでスキャンに成功した場合のコールバックは、リスナーを登録して得ることができます。

訳注:FragmentのsetListenerメソッドを使った場合、Fragmentの再生成時にリスナーを再登録できずに強制終了する可能性があります。

本件は改良のため調整中です。
変更を最小限に抑えるため、ScannerFragment.ListenerインターフェースをActivityに実装しておくことをお勧めします。

ScannerFragmentを使う際の引数などの情報については、ScannerFragmentのドキュメントを参照してください。

Raw Imageをスキャンする

さらにカスタマイズしたバーコードのスキャンをする必要があるなら、Barcode SDKは画像データをスキャンする方法も提供しています。
これはM300でもっとも高度なバーコードのスキャン方法です。
開発者はバーコードスキャナーの、画像の取得と、取得した画像に前処理を行うことに責任があります。
バーコードをスキャンする前に、Contextを使ってスキャナーを初期化します。

import com.vuzix.sdk.barcode.Scanner;
import com.vuzix.sdk.barcode.ScanResult;
Scanner.init(context);

バーコードの画像データをスキャンします。
byte配列はグレースケールの画像データである必要があります。
さらに、画像の幅と高さを指定する必要があります。
例:

// acquire image data
byte[] data;
int width;
int height;

// scan image data
ScanResult[] results = Scanner.scan(data, width, height);
If (results.length > 0) {
// we got results, do something with them
}

バーコードの画像のスキャンについては、Scannerのドキュメントを参照してください。

Voice SDKについて

Voice SDKは開発中で近日公開予定です。
このSDKは内蔵されているSensoryボイスアクションのカスタマイズでき、アプリケーションにおいて複数言語での ボイスコマンドを利用できるようになります。

カメラ SDKについて

カメラ SDKは開発中で近日公開予定です。カメラSDKの詳細な実装は、標準的なAndroid SDKの詳細と違いはありません。
しかし、わたしたちはCamera APIおよびCamera 2 APIを使ったベストプラクティスについてサンプルコードを公開する予定です。

タッチパッド SDKについて

タッチパッド SDKは開発中で近日公開予定です。
このSDKは特定のアプリケーションのタッチパッド動作をカスタマイズすることができます。