新人成長記録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