Use the Android sensor to write your own thermometer, hygrometer support android5.0
Source: Internet
Author: User
<span id="Label3"></p><p><p>The principle of writing a temperature hygrometer is simple, is to obtain the temperature, humidity sensor data, and other sensors using the same method is the same (if the cell phone to have temperature, humidity Sensor)</p></p><p><p>The first is to get the sensor manager:</p></p><p><p></p></p><pre name="code" class="java"><pre name="code" class="java">(sensormanager) Getsystemservice (context.sensor_service);</pre></pre>The following code allows you to see which sensors are on your phone:<p><p></p></p><p><p></p></p><pre name="code" class="java"><pre name="code" class="java">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", "------------------");}</pre></pre>The next step is to obtain a temperature sensor and a humidity sensor:<p><p></p></p><p><p></p></p><pre name="code" class="java"><pre name="code" class="java">Msensormanager.getdefaultsensor (sensor.type_ambient_temperature); Temperature sensor</pre></pre><pre name="code" class="java"><pre name="code" class="java">Msensormanager.getdefaultsensor (sensor.type_relative_humidity); Humidity sensor</pre></pre>Register an event listener with the sensor to monitor changes in sensor Data:<p><p></p></p><p><p></p></p><pre name="code" class="java"><pre name="code" class="java">This.templistener = new Templistener (); this.humiditylistener = new Humiditylistener (); Msensormanager.registerlistener (templistener, temperature, sensormanager.sensor_delay_normal); Msensormanager.registerlistener (humiditylistener, humidity, sensormanager.sensor_delay_normal);</pre></pre>The listener is also very simple, just implement two methods:<p><p></p></p><p><p></p></p><pre name="code" class="java"><pre name="code" class="java">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 + "℃"); } @Overridepublic void onaccuracychanged (sensor sensor, int Accuracy) {log.i ("sensor", "onaccuracychanged");}}</pre></pre>The Onsensorchanged method is triggered when the sensor data changes, The Onaccuracychanged method is triggered when the Sensor's accuracy changes, This is not what to do here for the time being, change it ...<p><p></p></p><p><p>At the end, don't forget to unregister the Listener:</p></p><p><p></p></p><pre name="code" class="java"><pre name="code" class="java">@Overrideprotected void OnPause () {super.onpause (); Msensormanager.unregisterlistener (this.templistener); Msensormanager.unregisterlistener (this.humiditylistener); log.i ("sensor", "sensor pause");</pre></pre><br>finally, The entire activity code is attached:<p><p></p></p><p><p></p></p><pre name="code" class="java">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; @Overrideprotected void OnCreate (Bundle Savedinstancestate) {super.oncreate (savedinstancestate); Setcontentview (r.layout.activity_main);} @Overrideprotected 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);} @Overridepublic 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);} @Overrideprotected 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]; Use this data to do some work BigDecimal BD = new BigDecimal (temperaturevalue);d ouble temperature = Bd.setscale (2, Bigdecimal.round_h alf_up). doublevalue ();//log.i ("sensor", "sensor changed==>" + millibars_of_pressure); TextView tem = (TextView) MainActivity.this.findViewById (r.id.temperature); Tem.settext (temperature + "℃"); } @Overridepublic void onaccuracychanged (sensor sensor, int Accuracy) {//log.i ("sensor", "onaccuracychanged");}} Private class Humiditylistener implements Sensoreventlistener {@Overridepublic final void onsensorchanged (sensorevent Event) {float humidityvalue = event.values[0]; Use this data to perform some work BigDecimal BD = new BigDecimal (humidityvalue);d ouble 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 + "%");} @Overridepublic void onaccuracychanged (sensor sensor, int Accuracy) {//log.i ("sensor", "onaccuracychanged");}}}</pre><br>Reprint please indicate the source<p><p></p></p><p><p>Http://blog.csdn.net/redstarofsleep<br></p></p><p><p>Use the Android sensor to write your own thermometer, hygrometer support android5.0</p></p></span>
The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion;
products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the
content of the page makes you feel confusing, please write us an email, we will handle the problem
within 5 days after receiving your email.
If you find any instances of plagiarism from the community, please send an email to:
info-contact@alibabacloud.com
and provide relevant evidence. A staff member will contact you within 5 working days.