03.BLEデバイスとの接続・切断の処理を作る



BLEデバイスと接続する処理、BLEデバイスとの接続を切断する処理を作成します。

解説

BLEデバイスと接続するためにすべきことは、以下です。

  1. ConnectGattコールバックオブジェクトを定義します。
  2. ConnectGattコールバックオブジェクトの定義にて、接続状態が変わったときの処理であるonConnectionStateChange関数を定義し、ソフトウェア固有の処理(ボタンの有効無効処理、等)を行うようにします。
  3. BluetoothAdapterオブジェクトを用いて、BLEデバイスのオブジェクトを取得します。
    (BluetoothDevice device = mBluetoothAdapter.getRemoteDevice( mDeviceAddress );))
  4. 取得したBLEデバイスオブジェクトを用いて、connectGatt関数を呼び出す。第3引数には、1.で作成したConnectGattコールバックオブジェクトを指定します。
    (mBluetoothGatt = device.connectGatt( this, false, mGattcallback );

BLEデバイスと切断するためにすべきことは、以下です。

  1. BluetoothGattオブジェクトを用いて、close関数を呼び出します。
    (mBluetoothGatt.close();)
  2. BluetoothGattオブジェクトを開放します。
    (mBluetoothGatt = null;)

上記以外に、今回やっていることは、以下です。

実装

プロジェクトを開く

02.で作成したプロジェクトを開きます。

文字列リソースの追加

必要な文字列定義を追加します。

「Project」ペインの「app > res > values > strings.xml」を開きます。

「Connect」ボタン用の文字列の定義と、「Disconnect」ボタン用の文字列の定義を追加します。


「strings.xml」全体としては、以下のようにします。


ファイルを上書き保存します。

レイアウトの編集

メインアクティビティのレイアウトを編集します。

「Project」ペインの「app > res > layout > activity_main.xml」を開きます。

デバイス名と、デバイスアドレスを表示するためのTextViewの下に、「Connect」ボタンと「Disconect」ボタンを設置します。


activity_main.xmlの内容を以下のようにします。

メインアクティビティクラスのメンバー変数の追加

メインアクティビティに、必要な定数宣言とメンバー変数宣言を追加します。

BluetoothGattオブジェクト、「Connect」ボタンオブジェクト、「Disconnect」ボタンオブジェクトの変数宣言を追加します。

「MainActivity」クラスの定数、変数の宣言を以下のようにします。


「Cannot resolve symbol」エラーは、「Alt + Enter」で、必要なクラスをimportします。
リビルドし、エラー、警告がないことを確認します。

メインアクティビティクラスのonCreate関数の編集

メインアクティビティのonCreate関数に、必要な処理を追加します。

「Connect」ボタン、「Disconnect」ボタンの取得とクリックリスナーの設定の処理を追加します。

onCreate関数を、以下のようにします。

メインアクティビティクラスにボタンのクリックリスナーの追加

ボタンのクリックリスナーを実装するために、メインアクティビティクラスに「implements View.OnClickListener」を追加します。


ボタンのクリックリスナーを実装します。
「MainActivity」クラスの末尾に、以下を追加します。

メインアクティビティクラスに接続・切断の関数の追加

接続・切断の関数を追加します。

「MainActivity」クラスの末尾に、以下を追加します。

メインアクティビティクラスにBluetoothGattコールバッククラスのオブジェクトの定義の追加

BluetoothGattコールバッククラスのオブジェクトの定義を追加します。

接続完了したときの処理と、接続可能範囲から外れて切断されたときの処理を追加します。

「MainActivity」クラスのメンバ変数宣言の直後、onCreate関数の前に、以下を追加します。

「Cannot resolve symbol」エラーは、「Alt + Enter」で、必要なクラスをimportします。
リビルドし、エラー、警告がないことを確認します。

メインアクティビティクラスのonResume関数の編集

onResume関数を編集します。

初回表示時および復帰時には、「Connect」ボタン、「Disconnect」ボタンが無効となるように処理を追加します。
初回表示時および復帰時に、デバイスアドレスが空でなければ、接続ボタンが有効になるように処理を追加します。
初回表示時および復帰時には、「Connect」ボタンが自動で押されるように処理を追加します。

メインアクティビティクラスに、onPause関数、onDestroy関数の追加

メインアクティビティに、「別のアクティビティ(か別のアプリ)に移行したことで、バックグラウンドに追いやられた時」に呼ばれる関数である onPause関数と、「アクティビティの終了直前」に呼ばれる関数である onDestroy関数を追加します。

onPause関数では、切断の関数を呼びます。
onDestroy関数では、BluetoothGattコールバッククラスのオブジェクトを削除します。

onResume関数の直後に、以下を追加します。

実行

BLEモジュールの準備。

「フィジカルコンピューティング > RN4020 > Arduinoからのキャラクタリスティックの値の書き込み」に従い、BLEモジュールを準備しておきます。

Android端末にて、動作確認。

ソフト起動後の画面。
「Connect」ボタンと「Disconnect」ボタンは無効となっています。


右上の「検出」アイコンをタップすると、「BLEデバイス検出アクティビティ」に移行します。


検出されたBLEデバイスの名前をタップすると、「メインアクティビティ」に戻ります。
「Device Name」欄と「Device Addres」欄に、BLEデバイスの名前とアドレスが表示されます。
「Connect」ボタンは自動で押され、BLEデバイスに接続します。接続が完了すると「Disconnect」ボタンが有効となります。


「Disconnect」ボタンを押すと、BLEデバイスとの接続が切断されます。切断が完了すると「Connect」ボタンが有効となります。

ダウンロード

サンプルプロジェクト
github.com上のダウンロードページ

関連ページ

前項目:02.BLEデバイスを検出する処理を作る

次項目:04.BLEデバイスから値を読み込む処理を作る