- "android-18" SDK (for Android 4.3)
- Bluetooth LE
- scala & sbt
- scala android-sdk-plugin
% brew update
% brew install scala sbt
copy IBeacon.scala
into your app.
add user-permission
<manifest>
<application> ~~ your app ~~ </application>
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-feature android:name="android.hardware.bluetooth_le" android:required="true" />
</manifest>
import org.shokai.ibeacon.{IBeacon, Beacon};
class MainActivity extends Activity{
lazy val iBeacon:IBeacon = new IBeacon(this)
override def onCreate(savedInstanceState:Bundle){
// capture all beacon packet
iBeacon.onBeacon((beacon:Beacon) => {
Log.v("iBeacon", s"UUID=${beacon.uuid} Major=${beacon.major} Minor=${beacon.minor} RSSI=${beacon.rssi}")
})
// when beacon appear
iBeacon.onDiscover((beacon:Beacon) => {
Log.v("iBeacon", s"discover ${beacon}")
})
// specify UUID, Major, Minor (hex-code)
iBeacon.onDiscover("805D6740-F575-492A-8668-45E553EB9DF2", null, null, (beacon:Beacon) => {
Log.v("iBeacon", s"discover UUID=${beacon.uuid} Major=${beacon.major}")
})
}
}
// Region by RSSI
iBeacon.onRegion("805D6740-F575-492A-8668-45E553EB9DF2", "0001", "0001", Range(-70,-50), (beacon:Beacon) => {
Log.v("iBeacon", s"region(-70~-50) UUID=${beacon.uuid} RSSI=${beacon.rssi}")
})
iBeacon.onFar("805D6740-F575-492A-8668-45E553EB9DF2", "0001", "0001", (beacon:Beacon) => {
Log.v("iBeacon", s"far: ${beacon.uuid}")
})
iBeacon.onNear("805D6740-F575-492A-8668-45E553EB9DF2", "0001", "0001", (beacon:Beacon) => {
Log.v("iBeacon", s"near: ${beacon.uuid}")
})
iBeacon.onImmediate("805D6740-F575-492A-8668-45E553EB9DF2", "0001", "0001", (beacon:Beacon) => {
Log.v("iBeacon", s"immediate: ${beacon.uuid}")
})
val eid = iBeacon.onBeacon((beacon:Beacon) => {
Log.v("iBeacon", s"UUID=${beacon.uuid}")
})
iBeacon.removeListener(eid)
% cd SampleApps/iBeaconReader
or
% cd SampleApps/iBeaconService
% android update project --path `pwd`
% sbt
> android:package-debug
% adb devices
% adb install -r iBeaconReader-debug.apk
% sbt "~ android:run"