SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事(AD)

ソフトとハードのつくり手が自由につながるIoTプラットフォーム「Linking」の概要と使い方

  • X ポスト
  • このエントリーをはてなブックマークに追加

周辺デバイス情報の取得

 次に、周辺デバイスの情報を取得する方法を紹介します。ここでは下記のような、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;
                }
            }
        }
    }
}

次のページ
周辺デバイスへのデータ送信

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

株式会社ブリリアントサービス 角野 宏樹(カクノ ヒロキ)

 1990年生まれ。神戸電子専門学校のゲーム学科を卒業後、Androidの仕事がしたいと思い株式会社ブリリアントサービスに就職。中学、高校時代にバレーボールで培った体力を元にAndroidアプリを中心としたスマートフォン開発事業に携わっている。バレーボールとロードバイクとアニメが趣味。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/9224 2016/02/17 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング