Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
MILAN 20/21.11.2015
Kseniia Shumelchyk – SoftServe Inc./GDG Dnipropetrovsk
Android Wear iBeacon development
MILAN 20/21.11.2015 - Kseniia Shumelchyk
iBeacons
MILAN 20/21.11.2015 - Kseniia Shumelchyk
iBeacon
-  iBeacon is a protocol standardised by Apple and introduced at the WWDC...
MILAN 20/21.11.2015 - Kseniia Shumelchyk
Internal structure
MILAN 20/21.11.2015 - Kseniia Shumelchyk
Typical Beacon usage
MILAN 20/21.11.2015 - Kseniia Shumelchyk
What is BLE?
Bluetooth low energy (Bluetooth Smart) is a
wireless personal area n...
MILAN 20/21.11.2015 - Kseniia Shumelchyk
What is BLE?
-  Not backward-compatible (with classic Bluetooth protocol)
-  Uses...
MILAN 20/21.11.2015 - Kseniia Shumelchyk
Specification
Technical Specification
Classic Bluetooth
technology
Bluetooth Smar...
MILAN 20/21.11.2015 - Kseniia Shumelchyk
Generic Attribute Profile (GATT)
-  Client - A device that initiates GATT command...
MILAN 20/21.11.2015 - Kseniia Shumelchyk
Generic Attribute Profile (GATT)
-  Service - A collection of related characteris...
MILAN 20/21.11.2015 - Kseniia Shumelchyk
GATT Operations
-  Discover UUIDs for all primary services
-  Find a service with...
Internals
MILAN 20/21.11.2015 - Kseniia Shumelchyk
Beacon’s Advertisement
-  Beacon advertises a data package called the Scan Respon...
MILAN 20/21.11.2015 - Kseniia Shumelchyk
Packet structure (1)
Ad Structure 1
0x02 0x01 0x1A
Remaining length AD Type Data
...
MILAN 20/21.11.2015 - Kseniia Shumelchyk
Packet structure (2)
Ad Structure 2
0x1B 0xFF 0xE0 0x00 0xBE 0xAC
Remaining lengt...
MILAN 20/21.11.2015 - Kseniia Shumelchyk
Packet structure (2)
Ad Structure 2
0x0C […] 0xBB 0x00 0x09 0x00 0x06 0xBA
UUID (...
MILAN 20/21.11.2015 - Kseniia Shumelchyk
Internals
02 01 06 1A FF 4C 00 02 15: prefix (fixed except for 3rd byte - flags)
...
MILAN 20/21.11.2015 - Kseniia Shumelchyk
MILAN 20/21.11.2015 - Kseniia Shumelchyk
Android
-  Built in support for Android 4.3+
-  Central & peripheral roles
-  GAT...
Android 4.3 & iBeacons
MILAN 20/21.11.2015 - Kseniia Shumelchyk
•  Android 4.3 for Beacons detection (1)
<uses-permission android:name="android.p...
MILAN 20/21.11.2015 - Kseniia Shumelchyk
•  Android 4.3 for Beacons detection (2)
!
final BluetoothManager bluetoothManage...
MILAN 20/21.11.2015 - Kseniia Shumelchyk
•  Android 4.3 for Beacons detection (3)
private LeScanCallback mLeScanCallback =...
Android 5+ & iBeacons
MILAN 20/21.11.2015 - Kseniia Shumelchyk
Android 5.0+ for Beacons detection
-  New api to work with BLE devices
-  Backgro...
MILAN 20/21.11.2015 - Kseniia Shumelchyk
LOW_POWER LOW_LATENCY
Test duration 134 minutes 152 minutes
Battery Level Change ...
MILAN 20/21.11.2015 - Kseniia Shumelchyk
•  Android 5.0 for Beacons detection (1)
private void setScanFilter() {	
  
	
  	...
MILAN 20/21.11.2015 - Kseniia Shumelchyk
•  Android 5.0 for Beacons detection (2)
•  ENTER
FILENAM
E/LANG
private void set...
MILAN 20/21.11.2015 - Kseniia Shumelchyk
•  Android 5.0 for Beacons detection (3)
•  ENTER
FILENAM
E/LANG
protected ScanCa...
MILAN 20/21.11.2015 - Kseniia Shumelchyk
•  Android 5.0 for Beacons detection (4)
•  ENTER
FILENAM
E/LANG
mBluetoothLeScan...
Android iBeacon emitter
MILAN 20/21.11.2015 - Kseniia Shumelchyk
Android Beacon emitter
-  Works starting from 5.0
-  Currently only Nexus 6, Nexu...
MILAN 20/21.11.2015 - Kseniia Shumelchyk
•  Android iBeacon emitter (1)
•  ENTER
FILENAM
E/LANG
protected void setAdvertis...
MILAN 20/21.11.2015 - Kseniia Shumelchyk
•  Android iBeacon emitter (2)
•  ENTER
FILENAM
E/LANG
protected void setAdvertis...
MILAN 20/21.11.2015 - Kseniia Shumelchyk
Good to go, we can start advertising :)
Good to go, we can start advertising :-D
...
Android Wear app example
MILAN 20/21.11.2015 - Kseniia Shumelchyk
MILAN 20/21.11.2015 - Kseniia Shumelchyk
Use cases
MILAN 20/21.11.2015 - Kseniia Shumelchyk
On track - for runners
MILAN 20/21.11.2015 - Kseniia Shumelchyk
Shopping molls
MILAN 20/21.11.2015 - Kseniia Shumelchyk
Indoor navigation
MILAN 20/21.11.2015 - Kseniia Shumelchyk
Museums
MILAN 20/21.11.2015 - Kseniia Shumelchyk
Clinics
MILAN 20/21.11.2015 - Kseniia Shumelchyk
Hotel check-in & check-out
MILAN 20/21.11.2015 - Kseniia Shumelchyk
For disabled people
MILAN 20/21.11.2015
G+ KseniiaShumelchyk
Fb Kseniya.Shumelchyk
www www.dnipro.gdg.org.ua
MILAN 20/21.11.2015 - SPEAKER’S NAME
Leave your feedback on Joind.in!
https://m.joind.in/event/codemotion-milan-2015
Upcoming SlideShare
Loading in …5
×

Kseniia Shumelchyk - Android iBeacon development

739 views

Published on

iBeacon is a new technology created by Apple. iBeacon uses a Bluetooth low energy signal, which Android 4.3+ devices can detect. We will discuss different implementations for devices prior to 5.0, and for 5.0 and higher. During our talk you will learn how to implement background beacon scanning, how to improve battery life (and how to choose between fast beacon detection and longer battery life). Also we'll discuss, on how to turn your Android Wear device into multiple iBeacon transmitters. Allowing a single Android device to act as multiple iBeacons opens up a huge number of possibilities.

Published in: Technology
  • Be the first to comment

Kseniia Shumelchyk - Android iBeacon development

  1. 1. MILAN 20/21.11.2015 Kseniia Shumelchyk – SoftServe Inc./GDG Dnipropetrovsk Android Wear iBeacon development
  2. 2. MILAN 20/21.11.2015 - Kseniia Shumelchyk iBeacons
  3. 3. MILAN 20/21.11.2015 - Kseniia Shumelchyk iBeacon -  iBeacon is a protocol standardised by Apple and introduced at the WWDC in 2013 -  Based on top of BLE -  BLE works starting from 4S on Apple -  BLE works starting from 4.3 on Android
  4. 4. MILAN 20/21.11.2015 - Kseniia Shumelchyk Internal structure
  5. 5. MILAN 20/21.11.2015 - Kseniia Shumelchyk Typical Beacon usage
  6. 6. MILAN 20/21.11.2015 - Kseniia Shumelchyk What is BLE? Bluetooth low energy (Bluetooth Smart) is a wireless personal area network technology aimed for novel applications in the healthcare, fitness, beacons, security, and home entertainment industries
  7. 7. MILAN 20/21.11.2015 - Kseniia Shumelchyk What is BLE? -  Not backward-compatible (with classic Bluetooth protocol) -  Uses same radio frequencies - 2.4 GGZ -  1 Mbps (1-3 Mbps with regular bluetooth) -  Embedded devices & wearables
  8. 8. MILAN 20/21.11.2015 - Kseniia Shumelchyk Specification Technical Specification Classic Bluetooth technology Bluetooth Smart technology Distance/Range (theoretical max.) 100 m (330 ft) >100 m (>330 ft) Over the air data rate 1–3 Mbit/s 1 Mbit/s Active slaves 7 Not defined; implementation dependent Minimum total time to send data 100 ms 3 ms Power consumption 1 W as the reference 0.01 to 0.5 W (depending on use case)
  9. 9. MILAN 20/21.11.2015 - Kseniia Shumelchyk Generic Attribute Profile (GATT) -  Client - A device that initiates GATT commands and requests, and accepts responses, for example a computer or smartphone -  Server - A device that receives GATT commands and requests, and returns responses, for example a temperature sensor. -  Characteristic - A data value transferred between client and server, for example the current battery voltage.
  10. 10. MILAN 20/21.11.2015 - Kseniia Shumelchyk Generic Attribute Profile (GATT) -  Service - A collection of related characteristics, which operate together to perform a particular function. For instance, the Health Thermometer service includes characteristics for a temperature measurement value, and a time interval between measurements. -  Descriptor - A descriptor provides additional information about a characteristic. For instance, a temperature value characteristic may have an indication of its units (e.g. Celsius), and the maximum and minimum values which the sensor can measure.
  11. 11. MILAN 20/21.11.2015 - Kseniia Shumelchyk GATT Operations -  Discover UUIDs for all primary services -  Find a service with a given UUID -  Find secondary services for a given primary service -  Discover all characteristics for a given service -  Find characteristics matching a given UUID -  Read all descriptors for a particular characteristic
  12. 12. Internals
  13. 13. MILAN 20/21.11.2015 - Kseniia Shumelchyk Beacon’s Advertisement -  Beacon advertises a data package called the Scan Response Data -  This Data can be up to 31 bytes. -  The scan response is divided into AD structures
  14. 14. MILAN 20/21.11.2015 - Kseniia Shumelchyk Packet structure (1) Ad Structure 1 0x02 0x01 0x1A Remaining length AD Type Data 2 Flags Flag
  15. 15. MILAN 20/21.11.2015 - Kseniia Shumelchyk Packet structure (2) Ad Structure 2 0x1B 0xFF 0xE0 0x00 0xBE 0xAC Remaining length AD Type Manufacturer ID Beacon prefix 27 Manufacturer specific 224 (Google)
  16. 16. MILAN 20/21.11.2015 - Kseniia Shumelchyk Packet structure (2) Ad Structure 2 0x0C […] 0xBB 0x00 0x09 0x00 0x06 0xBA UUID (16 bytes) Major Minor TX Power 9 6 -70
  17. 17. MILAN 20/21.11.2015 - Kseniia Shumelchyk Internals 02 01 06 1A FF 4C 00 02 15: prefix (fixed except for 3rd byte - flags) B9 40 7F 30 F5 F8 46 6E AF F9 25 55 6B 57 FE 6D: UUID 00 49: major 00 0A: minor C5: measured TX power!
  18. 18. MILAN 20/21.11.2015 - Kseniia Shumelchyk
  19. 19. MILAN 20/21.11.2015 - Kseniia Shumelchyk Android -  Built in support for Android 4.3+ -  Central & peripheral roles -  GATT server & GATT client -  android.hardware.bluetooth_le feature
  20. 20. Android 4.3 & iBeacons
  21. 21. MILAN 20/21.11.2015 - Kseniia Shumelchyk •  Android 4.3 for Beacons detection (1) <uses-permission android:name="android.permission.BLUETOOTH"/>   <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>! Check for permission <uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>! Check for hardware
  22. 22. MILAN 20/21.11.2015 - Kseniia Shumelchyk •  Android 4.3 for Beacons detection (2) ! final BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);   mBluetoothAdapter = bluetoothManager.getAdapter();! Get the BluetoothAdapter ! if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) {       Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);       startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);   }! 4. Enable Bluetooth
  23. 23. MILAN 20/21.11.2015 - Kseniia Shumelchyk •  Android 4.3 for Beacons detection (3) private LeScanCallback mLeScanCallback = new LeScanCallback() {       @Override       public void onLeScan(final BluetoothDevice device, int rssi, byte[] scanRecord) {   … // Parsing beacon data          });      }   };! Define callback mBluetoothAdapter.startLeScan(mLeScanCallback);! Start BLE scanning
  24. 24. Android 5+ & iBeacons
  25. 25. MILAN 20/21.11.2015 - Kseniia Shumelchyk Android 5.0+ for Beacons detection -  New api to work with BLE devices -  Background scanning -  Filtering possibility -  SCAN_MODE_LOW_POWER mode -  SCAN_MODE_LOW_LATENCY mode
  26. 26. MILAN 20/21.11.2015 - Kseniia Shumelchyk LOW_POWER LOW_LATENCY Test duration 134 minutes 152 minutes Battery Level Change -13% -25% Battery Drain Rate 268mA 454mA Relative Battery Savings 41% -- Typical time between detections 4400 ms 100 ms http://developer.radiusnetworks.com/2014/10/28/android-5.0-scanning.html
  27. 27. MILAN 20/21.11.2015 - Kseniia Shumelchyk •  Android 5.0 for Beacons detection (1) private void setScanFilter() {        ScanFilter.Builder mBuilder = new ScanFilter.Builder();        ByteBuffer mManufacturerData = ByteBuffer.allocate(23);        ByteBuffer mManufacturerDataMask = ByteBuffer.allocate(24);        byte[] uuid = getIdAsByte(UUID.fromString("0CF052C297CA407C84F8B62AAC4E9020");        mManufacturerData.put(0, (byte)0xBE);        mManufacturerData.put(1, (byte)0xAC);        for (int i=2; i<=17; i++) {                mManufacturerData.put(i, uuid[i-2]);        }        for (int i=0; i<=17; i++) {                mManufacturerDataMask.put((byte)0x01);        }        mBuilder.setManufacturerData(224, mManufacturerData.array(), mManufacturerDataMask.array());        mScanFilter = mBuilder.build();   }! Creating filter for scanning
  28. 28. MILAN 20/21.11.2015 - Kseniia Shumelchyk •  Android 5.0 for Beacons detection (2) •  ENTER FILENAM E/LANG private void setScanSettings() {              ScanSettings.Builder mBuilder = new ScanSettings.Builder();              mBuilder.setReportDelay(0);              mBuilder.setScanMode(ScanSettings.SCAN_MODE_LOW_POWER);              mScanSettings = mBuilder.build();    }! Setting scanner settings
  29. 29. MILAN 20/21.11.2015 - Kseniia Shumelchyk •  Android 5.0 for Beacons detection (3) •  ENTER FILENAM E/LANG protected ScanCallback mScanCallback = new ScanCallback() {   @Override   public void onScanResult(int callbackType, ScanResult result) {   ScanRecord mScanRecord = result.getScanRecord();   int[] manufacturerData = mScanRecord.getManufacturerSpecificData(224);   int mRssi = result.getRssi();   }   }! Setting up callback
  30. 30. MILAN 20/21.11.2015 - Kseniia Shumelchyk •  Android 5.0 for Beacons detection (4) •  ENTER FILENAM E/LANG mBluetoothLeScanner.startScan(Arrays.asList(mScanFilter), mScanSettings, mScanCallback);! Start scanning
  31. 31. Android iBeacon emitter
  32. 32. MILAN 20/21.11.2015 - Kseniia Shumelchyk Android Beacon emitter -  Works starting from 5.0 -  Currently only Nexus 6, Nexus 9 and later models supported -  BluetoothLeAdvertiser & AdvertiseData & AdvertiseSettings support classes -  Different levels of transmitter power
  33. 33. MILAN 20/21.11.2015 - Kseniia Shumelchyk •  Android iBeacon emitter (1) •  ENTER FILENAM E/LANG protected void setAdvertiseData() {            AdvertiseData.Builder mBuilder = new AdvertiseData.Builder()            ByteBuffer mManufacturerData = ByteBuffer.allocate(24);            byte[] uuid = getIdAsByte(UUID.fromString("0CF052C297CA407C84F8B62AAC4E9020"));            mManufacturerData.put(0, (byte)0xBE); // Beacon Identifier            mManufacturerData.put(1, (byte)0xAC); // Beacon Identifier            for (int i=2; i<=17; i++) {   mManufacturerData.put(i, uuid[i-2]); // adding the UUID            }            mManufacturerData.put(18, (byte)0x00); // first byte of Major            mManufacturerData.put(19, (byte)0x09); // second byte of Major            mManufacturerData.put(20, (byte)0x00); // first minor            mManufacturerData.put(21, (byte)0x06); // second minor            mManufacturerData.put(22, (byte)0xB5); // txPower            mBuilder.addManufacturerData(224, mManufacturerData.array());            mAdvertiseData = mBuilder.build();      }! Setting emitter
  34. 34. MILAN 20/21.11.2015 - Kseniia Shumelchyk •  Android iBeacon emitter (2) •  ENTER FILENAM E/LANG protected void setAdvertiseSettings() {   AdvertiseSettings.Builder mBuilder = new AdvertiseSettings.Builder();   mBuilder.setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_LOW_POWER);     mBuilder.setConnectable(false);   mBuilder.setTimeout(0);   mBuilder.setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_MEDIUM);     mAdvertiseSettings = mBuilder.build();   }! Setting up setting
  35. 35. MILAN 20/21.11.2015 - Kseniia Shumelchyk Good to go, we can start advertising :) Good to go, we can start advertising :-D ENTER FILENAME/LANG mBluetoothLeAdvertiser.startAdvertising(mAdvertiseSettings, mAdvertiseData, mAdvertiseCallback);! Start advertising
  36. 36. Android Wear app example
  37. 37. MILAN 20/21.11.2015 - Kseniia Shumelchyk
  38. 38. MILAN 20/21.11.2015 - Kseniia Shumelchyk
  39. 39. Use cases
  40. 40. MILAN 20/21.11.2015 - Kseniia Shumelchyk On track - for runners
  41. 41. MILAN 20/21.11.2015 - Kseniia Shumelchyk Shopping molls
  42. 42. MILAN 20/21.11.2015 - Kseniia Shumelchyk Indoor navigation
  43. 43. MILAN 20/21.11.2015 - Kseniia Shumelchyk Museums
  44. 44. MILAN 20/21.11.2015 - Kseniia Shumelchyk Clinics
  45. 45. MILAN 20/21.11.2015 - Kseniia Shumelchyk Hotel check-in & check-out
  46. 46. MILAN 20/21.11.2015 - Kseniia Shumelchyk For disabled people
  47. 47. MILAN 20/21.11.2015 G+ KseniiaShumelchyk Fb Kseniya.Shumelchyk www www.dnipro.gdg.org.ua
  48. 48. MILAN 20/21.11.2015 - SPEAKER’S NAME Leave your feedback on Joind.in! https://m.joind.in/event/codemotion-milan-2015

×