新人成長記録24th

今回は、Androidのセンサーで取得できるものを学習していきます

取得できるセンサーの例として、加速度センサーや地磁気センサーがあります
device-2017-04-24-183619

利用できるセンサーの確認

端末によっては、利用できないセンサーもあります
自身の端末が、どのセンサーを利用できるか確認したい方は、以下コードで確認できます

	protected void onCreate(@Nullable Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_blog1);

		textView = (TextView) findViewById(R.id.textview_rating);

		sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
		List sensorList = sensorManager.getSensorList(Sensor.TYPE_ALL);

		for(Sensor sensor:sensorList){
			Log.d("Sensor", sensor.getName());
		}
	}

これで、Logcatに端末が利用可能な、センサーの一覧が表示されます

センサーの取得、利用例

私が使いたかったのは、気温を取得するセンサー(TYPE_AMBIENT_TEMPERATURE)ですが、手持ちの端末では、気温のセンサーは利用できなかったので、気圧を取得してみたいと思います
気圧を取得するセンサーは、TYPE_PRESSUREを指定します
リスナーは、SensorEventListenerを実装して使用します

	@Override
	protected void onCreate(@Nullable Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_blog1);

		textView = (TextView) findViewById(R.id.textview_rating);

		sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
	}

	@Override
	protected void onResume() {
		super.onResume();
		List sensorList = sensorManager.getSensorList(Sensor.TYPE_PRESSURE);

		if(sensorList.size() > 0){
			Sensor sensor = sensorList.get(0);
			sensorManager.registerListener(this, sensor, 
				SensorManager.SENSOR_DELAY_FASTEST);
		}
	}

	@Override
	protected void onPause() {
		super.onPause();
		sensorManager.unregisterListener(this);
	}

	@Override
	public void onSensorChanged(SensorEvent event) {
		switch (event.sensor.getType()) {
			case Sensor.TYPE_PRESSURE:
				textView.setText(String.valueOf(event.values[0]));
				break;
		}
	}

	@Override
	public void onAccuracyChanged(Sensor sensor, int accuracy) {

	}

onCreateでは、SensorManagerの取得をします
onResumeでは、センサーの取得とセンサーのリスナを登録します
センサー取得時に、リストのサイズが0の場合には、センサーが利用できないことを示します
0以上の場合に、リストの1個目の要素を取得してリスナの登録を行います
onPauseでは、センサーのリスナを解除します
アプリがバックグランドに回った時には、センサーの取得をやめることで、電池の消費を抑えることができます

onSensorChangedは、registerListenerで登録したセンサーに変化があった場合に呼ばれます
今回は、取得した気圧をテキストビューにセットしています

onAccuracyChangedは、センサー精度が変更された場合に呼ばれます
今回は、なにもしません

以上で、実装は終了です

TYPE_PRESSUREの部分を変更すれば、他のセンサーも取得できます

終わりに

センサーは、取得頻度やリスナの対応をしっかりしないと、端末に負担がかかるものです
高頻度で取得すれば、それだけ精度は高いですが、電池を消費しやすいです
アプリに適した設定を常に目指したいです

火曜日担当:poppy



アプリ関連ニュース

お問い合わせはこちら

お問い合わせ・ご相談はお電話、またはお問い合わせフォームよりお受け付けいたしております。

tel. 06-6454-8833(平日 10:00~17:00)

お問い合わせフォーム