9

Androidデバイスで周囲温度を測定したい。しかし、私のデバイスには温度計センサーが含まれていません。どうすれば測定できますか?ありがとう。

4

4 に答える 4

12

これは、Android で周囲温度を取得する方法の基本的な例です。

import android.support.v7.app.AppCompatActivity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Build;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;


public class MainActivity extends AppCompatActivity implements SensorEventListener {

    private TextView temperaturelabel;
    private SensorManager mSensorManager;
    private Sensor mTemperature;
    private final static String NOT_SUPPORTED_MESSAGE = "Sorry, sensor not available for this device.";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        temperaturelabel = (TextView) findViewById(R.id.myTemp);
        mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
        if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.ICE_CREAM_SANDWICH){
            mTemperature= mSensorManager.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE); // requires API level 14.
        }
        if (mTemperature == null) {             
            temperaturelabel.setText(NOT_SUPPORTED_MESSAGE);
        }       
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    protected void onResume() {
        super.onResume();
        mSensorManager.registerListener(this, mTemperature, SensorManager.SENSOR_DELAY_NORMAL);
    }

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


    @Override
    public void onSensorChanged(SensorEvent event) {
        float ambient_temperature = event.values[0];
        temperaturelabel.setText("Ambient Temperature:\n " + String.valueOf(ambient_temperature) + getResources().getString(R.string.celsius));     
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
        // Do something here if sensor accuracy changes.
    }
}

https://github.com/Jorgesys/Android_Ambient_Temperatureから完全な例をダウンロードできます 。

于 2015-03-26T17:42:18.727 に答える
3

これはできません。バッテリー温度とCPU温度の場合、存在する場合でも温度センサー。

編集:swayamが指摘したように、API 14に追加された周囲温度センサーがありますが、ジンジャーブレッドの互換性ドキュメントには、温度測定を含めないように明示的に記載されています

デバイス実装には、温度計 (つまり、温度センサー) を含めることができますが、含めるべきではありません。デバイス実装に温度計を含める場合は、デバイスの CPU の温度を測定する必要があります。他の温度を測定してはなりません。(このセンサー タイプは、Android 2.3 API では非推奨になっていることに注意してください。)

ただし、ほとんどの電話Sensor.TYPE_TEMPERATUREには非推奨の CPU 温度測定センサーしか含まれていません。したがって、これは正確な温度を示しません。Sensor.TYPE_AMBIENT_TEMPERATURE多くの電話が持っているとは思わないものを使用する必要があります。

于 2012-08-16T12:30:09.543 に答える
2

このコードを試してください:

public class SensorActivity extends Activity, implements SensorEventListener {
 private final SensorManager mSensorManager;
 private final Sensor mTemp;

 public SensorActivity() {
     mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
     mtemp = mSensorManager.getDefaultSensor(Sensor.TYPE_TEMPERATURE);
 }

 protected void onResume() {
     super.onResume();
     mSensorManager.registerListener(this, mTemp, SensorManager.SENSOR_DELAY_NORMAL);
 }

 protected void onPause() {
     super.onPause();
     mSensorManager.unregisterListener(this);
 }

 public void onAccuracyChanged(Sensor sensor, int accuracy) {
 }

 public void onSensorChanged(SensorEvent event) {
 }

さらに、ここでSensorManagerのドキュメントを参照できます: http://developer.android.com/reference/android/hardware/SensorManager.html

センサーの詳細はこちら:

http://developer.android.com/guide/topics/sensors/sensors_overview.html

http://developer.android.com/guide/topics/sensors/sensors_environment.html

于 2012-08-16T12:34:51.483 に答える