Save 37% off PRO during our Black Friday Sale! »

AndroidでBLEあれこれ

 AndroidでBLEあれこれ

2016.03.30 関西モバイルアプリ研究会 #12 用資料です。
Android6.0以降のBLEの変更について。

50a1ae3d2f81998c69a579daeb59f055?s=128

masanori_msl

March 29, 2016
Tweet

Transcript

  1. AndroidでBLEあれこれ 2016.03.30 @関モバ

  2. Who? Twitter: @masanori_msl vaguely: http://mslgt.hatenablog.com/ SearchWakayamaToilet: https://play.google.com/store/apps/details? id=jp.searchwakayamatoilet

  3. BLE? Bluetooth Low Energy  Bluetooth4.0規格の一部。  AndroidではOS ver.4.3から対応。 ※Peripheral側(後述)の機能はOS

    ver.5.0以降の一部端末でのみ 使用可能
  4. BLE? 特徴  省電力  Central(Master)とPeripheral(Slave)に分かれて 通信する  etc.

  5. Sample Kotlin版  AndroidKtBleController JAVA版  AndroidBleController (更新中...) https://github.com/masanori840816/AndroidKtBleController https://github.com/masanori840816/AndroidBleController

  6. 最近の変更 Android 6.0 (Central) 「ACCESS_FINE_LOCATION」 または「ACCESS_COARSE_LOCATION」 の権限が必要。 SDK 23 (Central)

    Android 6.0以上ではGPSが必要。 ※GPSがOFFの場合、Peripheral端末が見つけられない。
  7. 最近の変更 位置情報へのアクセス権限の要求 AndroidManifest.xml <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> または <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

    を追加する。
  8. 最近の変更 CentralActivity.kt @TargetApi(Build.VERSION_CODES.M) private fun requestBlePermission() { if (! checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION)

    == PackageManager.PERMISSION_GRANTED) { // 権限がなければリクエスト. requestPermissions(arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION), 0) } } override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String> , grantResults: IntArray) { when(requestCode){ 0 -> { if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 権限取得後の処理. } } } }
  9. 最近の変更

  10. 最近の変更 BluetoothをONにする CentralActivity.kt private fun requestBleOn(){ if(! bleAdapter!!.isEnabled) { //

    BluetoothがOFFならインテントを表示して設定を促す. startActivityForResult(Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE), 1) } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?){ super.onActivityResult(requestCode, resultCode, data) when(requestCode) { 1 -> { if(bleAdapter!!.isEnabled()){ // Bluetoothが使用可能になった後の処理. } } } }
  11. 最近の変更

  12. 最近の変更 GPSをONにする LocationAccesser.kt class LocationAccesser : GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { private

    var apiClient: GoogleApiClient? = null override fun onConnectionFailed(result: ConnectionResult) { } override fun onConnectionSuspended(cause: Int) { } override fun onConnected(bundle: Bundle?) { } fun checkIsGpsOn(activity: CentralActivity) { val locationRequest = LocationRequest.create() locationRequest.priority = LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY locationRequest.interval = 3000L locationRequest.fastestInterval = 500L
  13. 最近の変更 LocationAccesser.kt val builder = LocationSettingsRequest.Builder() .addLocationRequest(locationRequest) builder.setAlwaysShow(true) if (apiClient

    == null) { apiClient = GoogleApiClient .Builder(activity.applicationContext) .enableAutoManage(activity, this) .addApi(LocationServices.API) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .build() } // GPSがONかどうかを確認する. val result = LocationServices.SettingsApi.checkLocationSettings(apiClient, builder.build()) result.setResultCallback { settingsResult ->
  14. 最近の変更 LocationAccesser.kt val status = settingsResult.status when (status.statusCode) { LocationSettingsStatusCodes.RESOLUTION_REQUIRED

    ->{ // GPSがOffならIntent表示. onActivityResultで結果取得. status.startResolutionForResult(activity, 2) } } } } }
  15. 最近の変更

  16. N Releaseでの変更は?

  17. N Releaseでの変更?  3/29時点ではBLEに関連した変更はなさそう。  ただしData Saverやマルチウインドウ機能の追 加による影響が考えられる。

  18. 最後に iOSと比較すると対応端末や安定性などの面で ツラミがある(´;ω;`) が、 ウェアラブルデバイスや他の端末との連携で、 よりよいAndroidライフが...?

  19. 参考 iOS×BLE Core Bluetoothプログラミング Getting Started with Bluetooth Low Energy

    Bluetooth Low Energy - Android Developers First Preview of Android N: Developer APIs & Tools - Android Developers Blog https://developer.android.com/guide/topics/connectivity/blueto oth-le.html http://www.socym.co.jp/book/973 http://shop.oreilly.com/product/0636920033011.do http://android-developers.blogspot.jp/2016/03/first-preview-of- android-n-developer.html
  20. Credit Kotlin  Main Page:  License: Material icons 

    Main Page:  License:  Main Page:  License: Google Noto Fonts https://github.com/JetBrains/kotlin Apache License 2.0 https://design.google.com/icons/ https://www.google.com/get/noto/ CC-BY License SIL Open Font License (OFL)
  21. Thank you.