前面分析了sensor的hal层和sensorservice的启动,service启动之后,我们就可以在应用调用sensor的接口了,下面是一个简单的实例:
package com.sensortest;
import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.TextView;
public class Sensor_testActivity extends Activity implements SensorEventListener {
SensorManager sm=null;
Sensor tp=null;
Sensor gr=null;
TextView tv1=null;
TextView tv2=null;
TextView tv3=null;
StringBuffer sb=null;
long count;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sm=(SensorManager)getSystemService(SENSOR_SERVICE);
tp=sm.getDefaultSensor(Sensor.TYPE_TEMPERATURE);
gr=sm.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
sb=new StringBuffer();
count=0;
setContentView(R.layout.main);
tv1=(TextView)findViewById(R.id.tv1);
tv2=(TextView)findViewById(R.id.tv2);
tv3=(TextView)findViewById(R.id.tv3);
tv1.setText("TextView Test One:Temperature");
tv2.setText("TextView Test Two:Gravity");
tv3.setText("TextView Timestamp");
//setContentView(tv);
}
protected void onResume() {
super.onResume();
sm.registerListener(this, tp, SensorManager.SENSOR_DELAY_FASTEST);
sm.registerListener(this, gr, SensorManager.SENSOR_DELAY_FASTEST);
}
protected void onPause() {
super.onPause();
sm.unregisterListener(this);
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
//tv3.setText(" Timestamp:"+String.valueOf(event.timestamp));
count++;
sb.delete(0, sb.length());
if(event.sensor.getType()==Sensor.TYPE_TEMPERATURE)
sb.append(">>>>>>>>TEMPERATURE SENSOR NAME:"+tp.getName()+" VENDOR:"+tp.getVendor()+" V[0]:"+String.valueOf(event.values[0])+" V[1]:"+String.valueOf(event.values[1])+" V[2]:"+String.valueOf(event.values[2])+" V[3]:"+String.valueOf(event.values[3]));
//tv1.setText(" TEMPERATURE SENSOR NAME:"+tp.getName()+" VENDOR:"+tp.getVendor()+" V[0]:"+String.valueOf(event.values[0])+" V[1]:"+String.valueOf(event.values[1])+" V[2]:"+String.valueOf(event.values[2])+" V[3]:"+String.valueOf(event.values[3]));
else if(event.sensor.getType()==Sensor.TYPE_GYROSCOPE)
sb.append(" V[0]:"+String.valueOf(event.values[0])+" V[1]:"+String.valueOf(event.values[1])+" V[2]:"+String.valueOf(event.values[2]));
sb.append("\n");
tv1.setText(sb.toString());
tv2.setText("Event Count: "+String.valueOf(count));
//tv2.setText(" GRAVITY SENSOR NAME:"+tp.getName()+" VENDOR:"+tp.getVendor()+" V[0]:"+String.valueOf(event.values[0])+" V[1]:"+String.valueOf(event.values[1])+" V[2]:"+String.valueOf(event.values[2])+" V[3]:"+String.valueOf(event.values[3]));
}
}
从上面的代码,我们可以看出使用Sensor的步骤:
1、 获取SENSOR_SERVICE
2、 调用sm.getDefaultSensor获取指定类型的sensor
3、 调用sm.registerListener注册我们要监听的sensor
4、 实现onSensorChanged,当有sensor数据到来的时候或改变的时候就会通过这个接口把数据上传上来。