在Android代码中,是否有任何用于找到/感知房间温度的API?

14

我正在开发一款Android应用程序,需要在其中找到室温。我正在使用Droid 2 A955型号进行测试。

我的问题如下:

  1. 为了执行这个温度检测任务,我需要在我的Android手机上有哪些传感器?

  2. Ambient Light Sensor(Droid 2可用)能帮助完成此任务吗?

  3. 是否有任何Android API可以在我的Android代码中以编程方式查找/感知室温?

非常感谢您的帮助。


#2 要么毫无意义,要么非常开放。通过一些外部物品,几乎任何东西都可以“帮助”,例如您可以将相机对准温度计,或将编码温度的光线瞄准光传感器。 - Chris Stratton
是的,我同意#2与此无关。但是,我对安卓市场上的“Thermo”应用程序产生了怀疑,这个应用程序究竟是如何提供室温的?它是一个假应用程序吗? "http://www.appbrain.com/app/thermo/com.antonio.thermo2.activity" - talasila
为什么需要API?直接使用硬件传感器不行吗!编辑我刚刚发现我妈妈的手机(Galaxy S4)是唯一支持温度传感器的手机。 - Confuse
9个回答

12
为了回答你的三个问题,我的回答是否定的。Android设备中可能会有温度传感器,但它只能测量电池的温度,而不能提供外部温度的准确测量。

我不确定环境光线传感器如何帮助测量温度,因为即使在阳光强烈的情况下,它也可能处于空调房间内。

最后,虽然有很多温度应用程序,但大多数与电池有关。

编辑:官方文档表示

设备实现可以但不应包括温度计(即温度传感器)。如果设备实现确实包括温度计,则必须测量设备CPU的温度。它不得测量任何其他温度。(请注意,此传感器类型在Android 2.3 API中已弃用。)

更新:

API级别14(即Android 4.0)及以上,支持测量环境温度(通过TYPE_AMBIENT_TEMPERATURE)。[Android doc reference]

但是,这仅适用于具有环境温度传感器的设备。


感谢提供参考,现在我理解了在droid 2中使用温度传感器的用法。 - talasila
这是否意味着无论如何都无法实时获取手机周围的环境温度? 我排除了城镇气象站的GPS位置,因为我需要获取手机周围(房间)的环境温度。 - quant

11

看起来API中有一个新的传感器

这个传感器用于测量环境温度,但可能只有少数设备实现了这个功能。

更新:看起来Galaxy S4是第一款集成环境温度传感器的手机。


2
仅适用于4.0及以上版本。 - Flynn81

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) {
 }
}

这应该让你在它自己的活动中访问温度传感器。
尝试一下,看看你能找到什么。文档中有其他类型传感器的很好的示例,温度传感器应该比大多数提供的传感器更简单。
希望这有所帮助!

1
你能确定这提供的是环境温度,而不是CPU或电池温度吗? - Chris Stratton
2
实际上这是电池/ CPU 温度。Android API 14(冰淇淋三明治)现在支持 Sensor.TYPE_AMBIENT_TEMPERATURE。 - Tom

2

您需要查看传感器参考文档。但是,我不认为大多数手持设备上有可访问的温度传感器。


1
你可以使用来自Kickstarter的iCelsius Wireless。它有一个API。使用智能手机内部传感器无法准确测量温度。它始终会高出几度。

0

试试这个:

private float temperature = 0;

在编程中,将以下代码放置于onCreate函数中:
    SensorManager mySensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    Sensor AmbientTemperatureSensor
            = mySensorManager.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE);
    if (AmbientTemperatureSensor != null) {
        mySensorManager.registerListener(
                AmbientTemperatureSensorListener,
                AmbientTemperatureSensor,
                SensorManager.SENSOR_DELAY_NORMAL);
    }

还有下面的方法:

private final SensorEventListener AmbientTemperatureSensorListener
            = new SensorEventListener() {

        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onSensorChanged(SensorEvent event) {
            if (event.sensor.getType() == Sensor.TYPE_AMBIENT_TEMPERATURE) {
                temperature = event.values[0];
            }
        }

    };

0

有一个古老的方法,就是让手机和“好”的温度计在室温下稳定一段时间(几个小时),并读取两者的温度。

然后将它放在一个约35华氏度的寒冷车库里让其稳定。然后祈求线性。

经验法则总是很好的。我非常感兴趣测量空房间中的恒定温度,并观察温度下降(或上升!!)。

布拉德肖在巴扎兹湾


0

我很久以前也有同样的问题。我的发现是:

  • 检查this官方网站上的环境传感器
  • 这个教程是关于环境传感器的:环境温度(室温)环境光线... Tutsplus。在我的手机上只有环境光线可以使用
  • 现在我知道只有三星Galaxy S4有环境温度功能。如果你有S4,请在gg playstore上搜索Holo Ambient Temperature。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接