11
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

FlashAdvent Calendar 2015

Day 24

AIR for Android で2台の端末をBluetooth接続

Posted at

先日、あるデモのためにAndroid端末間でBluetooth通信するコンテンツを作りました。Bluetooth用のANEを調べて、使ってみたのでご紹介します。

Bluetooth ANE (Android)(有料:$14.99)

※Youtubeでコンテンツデモが公開されています。
Bluetooth Adobe Air Native Extension

クラスは下記の2つとシンプルです。

  • Bluetooth
  • BluetoothEvent

以下、Bluetoothでデバイスを接続するまでと、接続後の通信にわけてざっくり説明します。

##【接続編】

1.Bluetoothクラスの生成

AS
// 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になるのを待つ)

AS
//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検索イベントの準備)

AS
//他の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デバイスを検索

AS
btnBT.addEventListener(MouseEvent.CLICK,onClick_startBT);

function onClick_startBT(e:MouseEvent):void{
	//他のBluetoothデバイスを検索開始
	_ex.startDiscovery();
}
  • この Bluetooth.startDiscovery() を呼び出すと、状況に応じて上記3.のイベントが発生します。

5.他のデバイスとのBluetooth接続監視(Bluetooth接続イベントの準備)

AS
//接続処理:監視
_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接続する

AS
//他の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です。
AS
//他デバイスへのメッセージ送信
_ex.sendMessage("xxxxxxxx");


//他デバイスへのメッセージ送信:監視イベント
_ex.addEventListener(BluetoothEvent.SEND_MESSAGE , sendMessage);

//他デバイスからのメッセージ受信:監視イベント
private function sendMessage(e:BluetoothEvent):void
{
	trace("sendMessage >> " + e.param);
	
}

2.他デバイスからのメッセージ受信

Bluetooth.sendMessage()で送信されたメッセージは、下記のイベントで受け取ります。

AS
//他デバイスからのメッセージ受信:監視
_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

##まとめ
実際に使うときは、接続用の画面と本編(コンテンツ)の画面を別に作って、接続後に切り替えることになると思います。有料ですがカンタンに使えるので、必要な方は使ってみて下さい。

メリークリスマス!

11
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?