先日、あるデモのためにAndroid端末間でBluetooth通信するコンテンツを作りました。Bluetooth用のANEを調べて、使ってみたのでご紹介します。
Bluetooth ANE (Android)(有料:$14.99)
※Youtubeでコンテンツデモが公開されています。
Bluetooth Adobe Air Native Extension
クラスは下記の2つとシンプルです。
- Bluetooth
- BluetoothEvent
以下、Bluetoothでデバイスを接続するまでと、接続後の通信にわけてざっくり説明します。
##【接続編】
1.Bluetoothクラスの生成
// Bluetoothクラスの生成
var _ex:Bluetooth;
if (_ex) {
//このANEを使っている場合にメモリを解放するためのメソッド
_ex.dispose();
}
_ex = new Bluetooth();
//Bluetoothの状態チェック
if (_ex.isEnable)
{
//---デバイスのBluetooth:ON
//他のデバイスにこのデバイスが表示されるようにする
_ex.visible(0);
//2つのデバイス間の通信を初期化する
_ex.initCommunicationService();
} else {
//---デバイスのBluetooth:OFF
//Bluetoothへのアクセス許可を要求(「ONにしていいか」のメッセージが、Android OSから通知されます)
_ex.enable();
}
- Bluetooth.initCommunicationServiceには、UUIDを引数として渡します。省略時は規定値が設定されます。
当然ですが接続する2台のUUIDは同じである必要があります。 - Bluetoothへのアクセス許可を要求(Bluetooth.enable())した場合、ユーザがAndroid OSからの通知にOKすると、下記2.のイベントが呼び出されます。
2.Bluetoothの状態を確認(OFFの場合、ONになるのを待つ)
//status監視
_ex.addEventListener(BluetoothEvent.BLUETOOTH_STATE , bluetoothState);
//BLUETOOTH_ONで行う処理
private function bluetoothState(e:BluetoothEvent):void
{
if (e.param == "bluetoothOn"){
//他のデバイスにこのデバイスが表示されるようにする
_ex.visible(0);
//2つのデバイス間の通信を初期化する
_ex.initCommunicationService();
}
}
3.Bluetoothの検索状態の監視(Bluetooth検索イベントの準備)
//他のBluetoothデバイスの検索状態を監視
_ex.addEventListener(BluetoothEvent.DISCOVERING_STATUS , discovering);
//他のBluetoothデバイスの検索状態を通知
private function discovering(e:BluetoothEvent):void
{
trace("discovering >> " + e.param);
if (e.param == "discoveringStarted")
{
//---検索開始
trace("デバイスの検索開始...");
}
else if (e.param == "discoveringFinished")
{
//---検索終了
trace("デバイスの検索終了しました");
}
}
//新しいデバイス検知
_ex.addEventListener(BluetoothEvent.NEW_DISCOVERD , newDiscoverd);
//新しいデバイス検知
private function newDiscoverd(e:BluetoothEvent):void
{
var obj:Object = e.param;
//obj.device >> device名 obj.mac >> macアドレス
trace("newDiscoverd >> " + "device = " + obj.device + " mac :" + obj.mac);
}
- この BluetoothEvent.NEW_DISCOVERD で返ってくるmacアドレスをbluetooth接続時に使います。
4.他のBluetoothデバイスを検索
btnBT.addEventListener(MouseEvent.CLICK,onClick_startBT);
function onClick_startBT(e:MouseEvent):void{
//他のBluetoothデバイスを検索開始
_ex.startDiscovery();
}
- この Bluetooth.startDiscovery() を呼び出すと、状況に応じて上記3.のイベントが発生します。
5.他のデバイスとのBluetooth接続監視(Bluetooth接続イベントの準備)
//接続処理:監視
_ex.addEventListener(BluetoothEvent.COMMUNICATION_STATUS , communication);
//接続処理:監視
private function communication(e:BluetoothEvent):void
{
trace("communication >> " + e.param);
if (e.param == "connecting")
{
trace("デバイスに接続中です...");
}
else if (e.param == "connected")
{
trace("デバイスに接続しました!");
//---ここに接続後の処理を記述
}
}
6.他のデバイスとBluetooth接続する
//他のBluetoothデバイスと接続する
btn1.addEventListener(MouseEvent.CLICK, toConnect);
function toConnect(e:MouseEvent):void
{
//ペアリング済のデバイスリストを取得
var pairList:Array = _ex.pairedList;
//ペアリング済かチェックする
var currDevice:Object;
for (var i:int = 0; i < pairList.length; i++)
{
currDevice = pairList[i];
if (currDevice.mac == mac)
{
//ペアリング済の場合は、デバイスと接続します
_ex.connectTo(mac);
return;
}
}
//ペアリングしていない場合、デバイスとペアリングします
_ex.pairWith(mac);
}
- 上記スクリプト中の「mac」は、上記4.で取得したmacアドレスを使用します。
- Bluetooth.pairWhith()は、ペアリングと接続を行います。
- ここで実行したメソッドの結果に応じて、上記5.のイベントが発生します。
##【通信編】
1.他デバイスへのメッセージ送信
- 送信出来るのは、Stringです。
//他デバイスへのメッセージ送信
_ex.sendMessage("xxxxxxxx");
//他デバイスへのメッセージ送信:監視イベント
_ex.addEventListener(BluetoothEvent.SEND_MESSAGE , sendMessage);
//他デバイスからのメッセージ受信:監視イベント
private function sendMessage(e:BluetoothEvent):void
{
trace("sendMessage >> " + e.param);
}
2.他デバイスからのメッセージ受信
Bluetooth.sendMessage()で送信されたメッセージは、下記のイベントで受け取ります。
//他デバイスからのメッセージ受信:監視
_ex.addEventListener(BluetoothEvent.READ_MESSAGE , readMessage);
//他デバイスからのメッセージ受信監視
private function readMessage(e:BluetoothEvent):void
{
//---e.paramが受信されたStirng
trace("readMessage >> " + e.param);
}
##補足事項
- 【確認環境】MacOSX 10.9.5+Flash Professional CS2014+AIR 17.0.0.124 for Android
- テスト端末:GALAXY NEXUS2、ASUS MeMo Pad 7 ME176
##まとめ
実際に使うときは、接続用の画面と本編(コンテンツ)の画面を別に作って、接続後に切り替えることになると思います。有料ですがカンタンに使えるので、必要な方は使ってみて下さい。
メリークリスマス!