前面分析了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数据到来的时候或改变的时候就会通过这个接口把数据上传上来。