androidセンサを用いて温度計を独自に作成し、湿度計はandroid 5をサポートする.0


温湿度計を作成する原理は簡単で、温度、湿度センサのデータを取得することであり、他のセンサの使用方法と同じです(携帯電話に温度、湿度センサがあることを前提としています)
まず、センサマネージャを取得します.
  (SensorManager) getSystemService(Context.SENSOR_SERVICE);
は、次のコードを使用して、携帯電話にどのようなセンサーがあるかを確認できます.
		List<Sensor> deviceSensors = mSensorManager.getSensorList(Sensor.TYPE_ALL);
		for (Sensor sensor : deviceSensors) {
			Log.i("sensor", "------------------");
			Log.i("sensor", sensor.getName());
			Log.i("sensor", sensor.getVendor());
			Log.i("sensor", Integer.toString(sensor.getType()));
			Log.i("sensor", "------------------");
		}
は、次に、温度センサおよび湿度センサを取得する.
  mSensorManager.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE); //     
  mSensorManager.getDefaultSensor(Sensor.TYPE_RELATIVE_HUMIDITY);  //     
センサにイベントリスナーを登録し、センサデータの変化を監視する.
		this.tempListener = new TempListener();
		this.humidityListener = new HumidityListener();
		
		mSensorManager.registerListener(tempListener, temperature, SensorManager.SENSOR_DELAY_NORMAL);
		mSensorManager.registerListener(humidityListener, humidity, SensorManager.SENSOR_DELAY_NORMAL);
リスナーも簡単で、2つの方法を実現するだけでいいです.
        private class TempListener implements SensorEventListener {
		@Override
		  public final void onSensorChanged(SensorEvent event) {
		    float temperatureValue = event.values[0];
		    BigDecimal bd = new BigDecimal(temperatureValue);
		    double temperature = bd.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
//		    Log.i("Sensor", "sensor changed==>" + millibars_of_pressure);
		    TextView tem = (TextView)MainActivity.this.findViewById(R.id.temperature);
		    tem.setText(temperature + "℃");
		  }
		@Override
		public void onAccuracyChanged(Sensor sensor, int accuracy) {
			Log.i("Sensor", "onAccuracyChanged");
		}
	}
onSensorChangedメソッドは、センサデータが変化したときにトリガーされ、onAccuracyChangedメソッドは、センサ精度が変化したときにトリガーされます.
終了時にListenerをログアウトすることを忘れないでください.
	@Override
	protected void onPause() {
		super.onPause();

	    mSensorManager.unregisterListener(this.tempListener);
	    mSensorManager.unregisterListener(this.humidityListener);
	    
//	    Log.i("Sensor", "sensor pause");
	}

最後にactivityコード全体を添付します.
package org.lhc.thermometer;

import java.math.BigDecimal;

import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.KeyEvent;
import android.widget.TextView;

public class MainActivity extends ActionBarActivity {

	private SensorManager mSensorManager;
	private Sensor temperature;
	private Sensor humidity;
	
	private SensorEventListener tempListener;
	private SensorEventListener humidityListener;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}
	
	@Override
	protected void onResume() {
		super.onResume();
		mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
//		List<Sensor> deviceSensors = mSensorManager.getSensorList(Sensor.TYPE_ALL);
//		for (Sensor sensor : deviceSensors) {
//			Log.i("sensor", "------------------");
//			Log.i("sensor", sensor.getName());
//			Log.i("sensor", sensor.getVendor());
//			Log.i("sensor", Integer.toString(sensor.getType()));
//			Log.i("sensor", "------------------");
//		}
		temperature = mSensorManager.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE);
		humidity = mSensorManager.getDefaultSensor(Sensor.TYPE_RELATIVE_HUMIDITY);
				
		this.tempListener = new TempListener();
		this.humidityListener = new HumidityListener();
		
		mSensorManager.registerListener(tempListener, temperature, SensorManager.SENSOR_DELAY_NORMAL);
		mSensorManager.registerListener(humidityListener, humidity, SensorManager.SENSOR_DELAY_NORMAL);
	}
	
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if (keyCode == KeyEvent.KEYCODE_BACK) {
			this.onPause();
//			Log.i("Sensor", "exit");
			this.finish();
			System.exit(0);
		}
		
		return super.onKeyDown(keyCode, event);
	}

	
	
	@Override
	protected void onPause() {
		super.onPause();

	    mSensorManager.unregisterListener(this.tempListener);
	    mSensorManager.unregisterListener(this.humidityListener);
	    
//	    Log.i("Sensor", "sensor pause");
	}
	
	private class TempListener implements SensorEventListener {
		@Override
		  public final void onSensorChanged(SensorEvent event) {
		    float temperatureValue = event.values[0];    //             
		    BigDecimal bd = new BigDecimal(temperatureValue);
			double temperature = bd.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
//		    Log.i("Sensor", "sensor changed==>" + millibars_of_pressure);
		    TextView tem = (TextView)MainActivity.this.findViewById(R.id.temperature);
		    tem.setText(temperature + "℃");
		  }
		@Override
		public void onAccuracyChanged(Sensor sensor, int accuracy) {
//			Log.i("Sensor", "onAccuracyChanged");
		}
	}
	
	private class HumidityListener implements SensorEventListener {
		@Override
		public final void onSensorChanged(SensorEvent event) {
			float humidityValue = event.values[0];    //             
			BigDecimal bd = new BigDecimal(humidityValue);
			double humidity = bd.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
//			Log.i("Sensor", "sensor changed==>" + millibars_of_pressure);
			TextView tem = (TextView)MainActivity.this.findViewById(R.id.humidity);
			tem.setText(humidity + "%");
		}
		@Override
		public void onAccuracyChanged(Sensor sensor, int accuracy) {
//			Log.i("Sensor", "onAccuracyChanged");
		}
	}
}

転載は出典を明記してください
http://blog.csdn.net/redstarofsleep