周辺デバイス情報の取得
次に、周辺デバイスの情報を取得する方法を紹介します。ここでは下記のような、Linkingアプリへ接続履歴のあるデバイスについての情報と、周辺デバイスのセンサーデータの取得に関する操作について説明します。
-
接続機器情報の取得
- 周辺デバイスの情報を取得することができます。
-
センサーデータの取得
- 周辺デバイスのセンサーデータを取得開始/停止することができます。
接続機器情報の取得
Linkingアプリで保持しているデバイスの情報の取得方法について紹介します。
GetDeviceInformationを使用して、接続履歴のあるデバイス情報を取得することができます。
備考
ContentResolverを利用してデバイス情報を取得するため、GetDeviceInformationのコンストラクタには必ずContextを渡すようにしてください。
import com.nttdocomo.android.sdaiflib.DeviceInfo; import com.nttdocomo.android.sdaiflib.GetDeviceInformation; public void getDeviceInfo() { GetDeviceInformation deviceInfo = new GetDeviceInformation(getApplicationContext() ); List<DeviceInfo> devices = deviceInfo.getInformation(); for (DeviceInfo info : devices) { Log.d(TAG, "Device name : " + info.getName() + " BD address : " + info.getBdaddress()); } }
センサーデータの取得
周辺機器のセンサーデータの取得方法について説明します。
ControlSensorDataクラスにobserver(ControlSensorData.SensorDataInterface)を設定することでセンサーデータを取得やセンサーデータの停止通知を受信することができます。
また、センサーデータの取得を開始依頼の結果は、Activity#onActivityResultの第2引数に結果が返却されます。そのため、Activity内のonActivityResult内に結果毎の処理を実装してください。
import com.nttdocomo.android.sdaiflib.ControlSensorData; import com.nttdocomo.android.sdaiflib.DeviceInfo; import com.nttdocomo.android.sdaiflib.ErrorCode; import com.nttdocomo.android.sdaiflib.GetDeviceInformation; public class MainActivity extends Activity { private ControlSensorData mSensorData; private MySensorDataInterface mySensorDataInterface; @Override protected void onCreate(Bundle savedInstanceState) { ~中略~ // ControlSensorData mySensorDataInterface = new MySensorDataInterface(); mSensorData = new ControlSensorData(this, mySensorDataInterface); } @Override protected void onDestroy() { super.onDestroy(); mSensorData.release(); } // センサーデータの取得開始 public void onClickStartSensor(View view) { GetDeviceInformation getDeviceInformation = new GetDeviceInformation(this); List<DeviceInfo> deviceInfos = getDeviceInformation.getInformation(); if (deviceInfos.isEmpty()) { Log.e(TAG, "デバイス情報が取得できませんでした"); return; } DeviceInfo info = deviceInfos.get(0); // 0 : ジャイロセンサー // 1 : 加速度センサー // 2 : 方位センサー // 3 ~ 255 : 拡張センサー mSensorData.setType(0) mSensorData.setBDaddress(info.getBdaddress()); mSensorData.start(); } // センサーデータの停止依頼 public void onClickStopSensor(View view) { mSensorData.stop(); } // センサーデータの受信/センサー停止通知を受信する class MySensorDataInterface implements ControlSensorData.SensorDataInterface { @Override public void onStopSensor(final String bd, int type, int reason) { Log.d(TAG, bd + ":センサーが停止しました。"); } @Override public void onSensorData(String bd, int type, float x, float y, float z, byte[] originalData, long time) { Log.d(TAG, bd + ":センサーデータを受信しました。"); Log.d(TAG, "xの値:" + x + "yの値 : " + y +"zの値 : " + z); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // センサーデータ取得開始依頼の結果が返る int result = mSensorData.onActivityResult(requestCode, requestCode, data); if (result != ErrorCode.RESULT_OTHER_ERROR) { switch (result) { case ErrorCode.RESULT_OK : { Log.d(TAG, "正常に取得開始しました。"); break; } default : { Log.e(TAG, "エラーにより失敗しました : " + result); break; } } } } }