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



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

解説

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

  1. BluetoothAdapterオブジェクトを用いて、Bluetoothデバイスのオブジェクトを取得します。
    (BluetoothDevice device = mBluetoothAdapter.getRemoteDevice( mDeviceAddress );))
  2. 取得したBluetoothデバイスオブジェクトを用いて、Bluetoothソケットオブジェクトを作成します。
    (mBluetoothSocket = bluetoothdevice.createRfcommSocketToServiceRecord( UUID_SPP );)
  3. 作成したBluetoothソケットオブジェクトを用いて、Bluetoothデバイスとの接続を試みます。
    (mBluetoothSocket.connect();)

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

  1. 作成したBluetoothソケットオブジェクトを閉じます。
    (mBluetoothSocket.close();)

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

実装

プロジェクトを開く

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

文字列リソースの追加

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

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

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


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


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

レイアウトの編集

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

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

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


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

Bluetooth通信サービスクラスの作成

Bluetoothデバイスと通信する際に使用する補助クラス「Bluetoothサービス」クラスを作成します。

「MainActivity」クラスの先頭に、内部クラスとして「Bluetoothサービス」クラスを追加します。


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

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

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

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

「BluetoothService」クラスの直後、onCreate関数の前の、定数、変数の宣言を、以下のようにします。


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

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

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

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

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

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

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


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

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

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

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

メインアクティビティクラスにBluetoothサービスから情報を取得するハンドラの定義の追加

Bluetoothサービスから情報を取得するハンドラの定義を追加します。

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

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

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

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

onResume関数を編集します。

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

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

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

onPause関数では、切断の関数を呼びます。
onDestroy関数では、BluetoothServiceクラスのオブジェクトを削除します。

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

実行

Bluetoothモジュールの準備。

「フィジカルコンピューティング > Arduino > Bluetooth通信する(Bluetoothモジュール RN-42 使用)」に従い、Bluetoothモジュールを準備しておきます。

Android端末では、Bluetoothモジュールとのペアリングをしておきます。

Android端末にて、動作確認。

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


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


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


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

ダウンロード

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

関連ページ

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

次項目:04.Bluetoothデバイスから文字列を受信する処理を作る