空姐肉丝脱鞋:DSALK Android传感器API之:温度传感器SensorTemperature功能源码
来源:百度文库 编辑:中财网 时间:2024/09/21 09:25:13
个人觉得温度传感器的应用频率应该不会太高,这也是部分Android手机直接将这个功能屏蔽掉的原因所在。不过从创意角度出发,基于这个传感器可以开发出一些有意思的应用,比如手机温度计、室温监测等等。。
个性化的应用就不说了,具体的说实话我也没做,只是把Rexsee的功能源码分享出来,回头要是有应用了再分享。和之前的帖子里提到的一样,Android平台带有大量的传感器功能,相关的原生源码可以在Rexsee的开源社区找到:http://www.rexsee.com/
SensorTemperature功能源码如下 标签: Android Rexsee
个性化的应用就不说了,具体的说实话我也没做,只是把Rexsee的功能源码分享出来,回头要是有应用了再分享。和之前的帖子里提到的一样,Android平台带有大量的传感器功能,相关的原生源码可以在Rexsee的开源社区找到:http://www.rexsee.com/
SensorTemperature功能源码如下 标签: Android Rexsee
代码片段(1)
[代码] RexseeSensorTemperature.java
view sourceprint?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.rexsee.com/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
017
package
rexsee.sensor;
018
019
import
rexsee.core.browser.JavascriptInterface;
020
import
rexsee.core.browser.RexseeBrowser;
021
import
android.content.Context;
022
import
android.hardware.Sensor;
023
import
android.hardware.SensorEvent;
024
import
android.hardware.SensorEventListener;
025
import
android.hardware.SensorManager;
026
027
public
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
}