mucchinのAndroid戦記

アプリケーション起動時のBluetoothのHeadset接続状態の取得方法

今回は、アプリ起動時にBluetoothの接続状態を取得する方法をご紹介したいと思います。

Bluetoothの着脱イベントリスナーを実装して・・・だと、起動中に付け外しされた場合は感知出来るのですが、これだけでは、そもそも起動時点での状態が取れません。
また、起動時に、registerReceiver()を使って「BluetoothDevice.ACTION_FOUND」のブロードキャストレシーバを使っても、本当に現在接続中なデバイスかどうかの判定が出来ませんでした。(過去に接続していたデバイスも接続中みたいな感じになってしまいました。Bluetoothデバイスの情報を取得する参照)

それでは手順を追って説明したいと思います。
まず最初に、onCreateイベントで準備を行います。


BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
bluetoothAdapter.getProfileProxy(this, mProfileListener, BluetoothProfile.HEADSET);
1行目で、BluetoothAdapterというインスタンスを取得します。
次の行で、Bluetoothヘッドセットの接続状態を取得する為の準備をします。
これをコールしてやると、API側の準備完了次第、第二引数の「mProfileListener」で渡したイベントリスナーに対して、コールバックしてくれます。
それでは、「mProfileListener」の中身です。
private BluetoothProfile.ServiceListener mProfileListener = new BluetoothProfile.ServiceListener() {
    public void onServiceConnected(int profile, BluetoothProfile proxy) {
        if (profile == BluetoothProfile.HEADSET) {
            mBluetoothHeadset = (BluetoothHeadset) proxy;
            List<bluetoothdevice> devices = mBluetoothHeadset.getConnectedDevices();
            if(devices.size() > 0){
                isBluetoothConnected = true;★1
                bluetoothDevice = devices.get(0);★2
            }
        }
    }
    public void onServiceDisconnected(int profile) {
        if (profile == BluetoothProfile.HEADSET) {
            mBluetoothHeadset = null;
        }
    }
};
mProfileListenerは、BluetoothProfile.ServiceListener型のインスタンスです。
中身で、onServiceConnectedイベントとonServiceDisconnectedを実装してやります。
後者は、アプリ終了時の処理なので、今回は説明を省きます。
先ほどの準備処理が整うと、上記のonServiceConnectedイベントが呼ばれます。
中では、まずはprofileによる処理の判定を行います。
今回は、BluetoothProfile.HEADSETしか設定していませんでしたが、他のプロファイルも登録可能です。その他のプロファイルは今回は割愛します。
次に、BluetoothHeadsetインスタンスを取り出して、そのgetConnectedDevices()メソッドを使って、現在その端末に繋がっているBluetoothヘッドセット機器のリストを取得しています。
こうすると、本当に現在接続されているデバイスしか取得出来ません。
で、デバイスが一つでもあればフラグを立ててやればOKです。(★1)
上記の★2の処理は、次の記事で使うので、今回は気にしないで下さい。

今回は以上です。