新人成長記録24th
今回は、Androidのセンサーで取得できるものを学習していきます
取得できるセンサーの例として、加速度センサーや地磁気センサーがあります

利用できるセンサーの確認
端末によっては、利用できないセンサーもあります
自身の端末が、どのセンサーを利用できるか確認したい方は、以下コードで確認できます
	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
admin at 2017年04月25日 10:00:31

 大人が楽しめるヒーリング絵本河童のカパと静かな森
大人が楽しめるヒーリング絵本河童のカパと静かな森 パワースポット 日本三大神滝布引の滝
パワースポット 日本三大神滝布引の滝 佐藤・広幸ドイツ魂
佐藤・広幸ドイツ魂 Himeji Castle姫路城
Himeji Castle姫路城 ボイドタイムお知らせアプリVoid Time 〜月を無視できない〜
ボイドタイムお知らせアプリVoid Time 〜月を無視できない〜 撮った写真をカレンダーに撮りカレ
撮った写真をカレンダーに撮りカレ ライブ壁紙竹田城ライブ壁紙
ライブ壁紙竹田城ライブ壁紙 赤ちゃんにっこりBaby+Smile
赤ちゃんにっこりBaby+Smile 電子書籍[for iPhone]ターラのアストロロジー
電子書籍[for iPhone]ターラのアストロロジー JSpreadsheet カラム設定Tips
									JSpreadsheet カラム設定Tips