Dev Phoneの温度センサはバッテリーの温度を測っているらしい。
Android(HTC Dev Phoneで検証、G1では未検証)の温度センサを試してみました。
気温20℃で33と表示されるのでなんかおかしいと思い、いろいろ調べてみるとインテントレシーバでバッテリーの温度が取れるらしいこと発見しました。もしやこれはセンサーの温度計を使ってるんじゃないかと思いインテントレシーバで取れる温度とセンサーで取れる温度を比べてみました。
public class TemperatureActivity extends Activity implements SensorEventListener { TextView intentText; TextView sensorText; private SensorManager sensorManager; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); intentText = (TextView)findViewById(R.id.intent); sensorText = (TextView)findViewById(R.id.sensor); sensorManager = (SensorManager)this.getSystemService(SENSOR_SERVICE); } @Override protected void onResume() { super.onResume(); IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_BATTERY_CHANGED); registerReceiver(mBroadcastReceiver, filter); // List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_TEMPERATURE); sensorManager.registerListener(this, sensors.get(0), SensorManager.SENSOR_DELAY_UI); } public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals(Intent.ACTION_BATTERY_CHANGED)) { int temperature = intent.getIntExtra("temperature", 0); intentText.setText("Temperature by Intent:" + temperature/10.0); } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { // } @Override public void onSensorChanged(SensorEvent e) { if (e.sensor.getType() == Sensor.TYPE_TEMPERATURE) { TextView x = (TextView)findViewById(R.id.sensor); x.setText("Temperature by Sensor:" + String.valueOf(e.values[SensorManager.DATA_X])); } } @Override protected void onPause() { super.onPause(); unregisterReceiver(mBroadcastReceiver); } private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals(Intent.ACTION_BATTERY_CHANGED)) { int temperature = intent.getIntExtra("temperature", 0); intentText.setText("Temperature by Intent:" + temperature/10.0); } } }; }
2009年5月9日17時55分に計測
2009年5月9日17時56分に計測
結果はほとんど同じでした。センサで取得した値にローパスフィルタかけてインテント飛ばしてるのではないかと思います。
今のところ確証はないです。APIドキュメントにも端末の仕様にも何も書いてないし...。