JRubyでBluetoothデバイスを検索してみる

Bluetoothに関する情報なかなか無いですが、JavaでアクセスできそうなのでJRubyに置きかえてサンプルを書いてみました。

ライブラリ準備

bluecoveというライブラリを使うとBluetoothを扱うことができるみたいです。
http://code.google.com/p/bluecove/
bluecove-2.1.0.jar

コーディング

バリバリJavaコードっぽくなってしまいましたが、Rubyのコードを以下に示します。

require 'java'
import javax.bluetooth.LocalDevice
import javax.bluetooth.DiscoveryAgent
import javax.bluetooth.DiscoveryListener

class BTSearch 
  extend DiscoveryListener

  def initialize
    @obj = java.lang.Object.new
    local = LocalDevice.getLocalDevice
    agent = local.getDiscoveryAgent
    
    #search device
    started = agent.startInquiry(DiscoveryAgent::GIAC, self)

    @obj.synchronized { @obj.wait }
  end

  def deviceDiscovered(btDevice, cod)
    address = btDevice.getBluetoothAddress
    puts "address : #{address}"
  end
  
  def servicesDiscovered(transID, servRecord)
  end
  
  def serviceSearchCompleted(transID, respCode)
  end

  def inquiryCompleted(discType)
    @obj.synchronized { @obj.notifyAll }
  end

end

BTSearch.new

実行してみる

PCにBluetoothバイス(USBとか)を差して、
他のBluetooth機器を検索に引っかかるように公開しておいて、以下を実行。

 % jruby -r bluecove-2.1.0.jar sample.rb

BlueCove version 2.1.0 on winsock
address : XXXXXXXXXX
BlueCove stack shutdown completed

待つこと数十秒、、、おぉ検索できたようです。


まずは、足がかりとしてこんなもんでしょうか。
とりあえず、ここまで。