Androidプログラマへの道 〜 Moonlight 明日香 〜 - BluetoothデバイスのRSSIを取得する
周辺のBluetoothデバイスのRSSI値を取得するには, 他のBluetoothデバイス発見時にBluetoothDevice#EXTRA_RSSIを使う.
注) ペアリングしたBluetoothデバイスのRSSI値取得はできないようである.



スキャン時のRSSI取得

  • Bluetooth01.java
    • 他のBluetoothデバイスのスキャンについては, Bluetoothデバイスを探すを参照.
    • Intent#getParcelableExtraメソッドで, BluetoothDeviceオブジェクトを取得する.
    • Intent#getShortExtraメソッドで, BluetoothDevice.EXTRA_RSSIを指定して, RSSIを取得する.
package com.moonlight_aska.android.bluetooth01;

import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.widget.TextView;

public class Bluetooth01 extends Activity {
  private BluetoothAdapter mBtAdapter;
  private TextView mScanResult;
  private String mResult = "";
  private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
      String action = intent.getAction();
      if (BluetoothDevice.ACTION_FOUND.equals(action)) {
        BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
        // RSSI値読み出し
        int rssi = intent.getShortExtra(BluetoothDevice.EXTRA_RSSI, Short.MIN_VALUE);
        mResult += "Device : " + device.getName() + " RSSI=" + rssi + "\n";
        mScanResult.setText(mResult);
      }
    }
  };

  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mScanResult = (TextView)findViewById(R.id.bt_text);
    // インテントフィルタの作成
    IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
    // ブロードキャストレシーバの登録
    registerReceiver(mReceiver, filter);

    // BluetoothAdapterのインスタンス取得
    mBtAdapter = BluetoothAdapter.getDefaultAdapter();
    // Bluetooth有効
    if (!mBtAdapter.isEnabled()) {
      mBtAdapter.enable();
    }
    // 周辺デバイスの検索開始
    mBtAdapter.startDiscovery();
  }

  @Override
  protected void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
    // 検索中止
    if (mBtAdapter.isDiscovering()) {
      mBtAdapter.cancelDiscovery();
    }
    unregisterReceiver(mReceiver);
  }
}