分享

DSALK Android传感器API之:温度传感器SensorTemperature功能源码

 wanwanstudy 2012-02-09
个人觉得温度传感器的应用频率应该不会太高,这也是部分Android手机直接将这个功能屏蔽掉的原因所在。不过从创意角度出发,基于这个传感器可以开发出一些有意思的应用,比如手机温度计、室温监测等等。。

个性化的应用就不说了,具体的说实话我也没做,只是把Rexsee的功能源码分享出来,回头要是有应用了再分享。和之前的帖子里提到的一 样,Android平台带有大量的传感器功能,相关的原生源码可以在Rexsee的开源社区找到:http://www./

SensorTemperature功能源码如下
标签: Android Rexsee

代码片段(1)

[代码] RexseeSensorTemperature.java

001/*
002* Copyright (C) 2011 The Rexsee Open Source Project
003*
004* Licensed under the Rexsee License, Version 1.0 (the "License");
005* you may not use this file except in compliance with the License.
006* You may obtain a copy of the License at
007*
008*      http://www./CN/legal/license.html
009*
010* Unless required by applicable law or agreed to in writing, software
011* distributed under the License is distributed on an "AS IS" BASIS,
012* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013* See the License for the specific language governing permissions and
014* limitations under the License.
015*/
016  
017package rexsee.sensor; 
018  
019import rexsee.core.browser.JavascriptInterface; 
020import rexsee.core.browser.RexseeBrowser; 
021import android.content.Context; 
022import android.hardware.Sensor; 
023import android.hardware.SensorEvent; 
024import android.hardware.SensorEventListener; 
025import android.hardware.SensorManager; 
026  
027public class RexseeSensorTemperature implements JavascriptInterface { 
028  
029       private static final String INTERFACE_NAME = "Temperature"
030       @Override 
031       public String getInterfaceName() { 
032               return mBrowser.application.resources.prefix + INTERFACE_NAME; 
033       
034       @Override 
035       public JavascriptInterface getInheritInterface(RexseeBrowser childBrowser) { 
036               return this
037       
038       @Override 
039       public JavascriptInterface getNewInterface(RexseeBrowser childBrowser) { 
040               return new RexseeSensorTemperature(childBrowser); 
041       
042  
043       public static final String EVENT_ONTEMPERATURECHANGED = "onTemperatureChanged"
044  
045       private final Context mContext; 
046       private final RexseeBrowser mBrowser; 
047       private final SensorManager mSensorManager; 
048       private final SensorEventListener mSensorListener; 
049       private final Sensor mSensor; 
050  
051       private int mRate = SensorManager.SENSOR_DELAY_NORMAL; 
052       private int mCycle = 100; //milliseconds 
053       private int mEventCycle = 100; //milliseconds 
054       private float mAccuracy = 0
055  
056       private long lastUpdate = -1
057       private long lastEvent = -1
058  
059       private float value = -999f; 
060  
061       public RexseeSensorTemperature(RexseeBrowser browser) { 
062               mContext = browser.getContext(); 
063               mBrowser = browser; 
064               browser.eventList.add(EVENT_ONTEMPERATURECHANGED); 
065  
066               mSensorManager = (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE); 
067  
068               mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_TEMPERATURE); 
069  
070               mSensorListener = new SensorEventListener() { 
071                       @Override 
072                       public void onAccuracyChanged(Sensor sensor, int accuracy) { 
073                       
074                       @Override 
075                       public void onSensorChanged(SensorEvent event) { 
076                               if (event.sensor.getType() != Sensor.TYPE_TEMPERATURE) return
077                               long curTime = System.currentTimeMillis(); 
078                               if (lastUpdate == -1 || (curTime - lastUpdate) > mCycle) { 
079                                       lastUpdate = curTime; 
080                                       float lastValue = value; 
081                                       value = event.values[SensorManager.DATA_X]; 
082                                       if (lastEvent == -1 || (curTime - lastEvent) > mEventCycle) { 
083                                               if (Math.abs(value - lastValue) > mAccuracy) { 
084                                                       lastEvent = curTime; 
085                                                       mBrowser.eventList.run(EVENT_ONTEMPERATURECHANGED); 
086                                               
087                                       
088                               
089                       
090               }; 
091  
092       
093  
094       public String getLastKnownValue() { 
095               return (value == -999) ? "null" : String.valueOf(value); 
096       
097  
098       public void setRate(String rate) { 
099               mRate = SensorRate.getInt(rate); 
100       
101       public String getRate() { 
102               return SensorRate.getString(mRate); 
103       
104       public void setCycle(int milliseconds) { 
105               mCycle = milliseconds; 
106       
107       public int getCycle() { 
108               return mCycle; 
109       
110       public void setEventCycle(int milliseconds) { 
111               mEventCycle = milliseconds; 
112       
113       public int getEventCycle() { 
114               return mEventCycle; 
115       
116       public void setAccuracy(float value) { 
117               mAccuracy = Math.abs(value); 
118       
119       public float getAccuracy() { 
120               return mAccuracy; 
121       
122  
123       public boolean isReady() { 
124               return (mSensor == null) ? false : true
125       
126       public void start() { 
127               if (isReady()) { 
128                       mSensorManager.registerListener(mSensorListener, mSensor, mRate); 
129               } else
130                       mBrowser.exception(getInterfaceName(), "Temperature sensor is not found."); 
131               
132       
133       public void stop() { 
134               if (isReady()) { 
135                       mSensorManager.unregisterListener(mSensorListener); 
136               
137       
138  
139}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多