android应用开发之sensor(传感器)
package com.hczhang.sensordemo;
import java.util.List;
import android.app.Activity;
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.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity implements OnClickListener, SensorEventListener{
// 实现OnclickListener、SensorEventListener接口
// class MyData {
// public String info;
// public MyData(String info) {
// this.info = info;
// }
// }
SensorManager mSensorManager; //申明传感器管理对象
List<Sensor> mSensorList; //申明已有传感器列表对象
ListView lv; //申明列表视图变量lv
Button regAcce, unregAcce, regProxi, unregProxi, regLight, unregLight;
TextView tvAcce0, tvAcce1, tvAcce2, tvProxi0, tvProxi1, tvProxi2, tvLight0, tvLight1, tvLight2;
//定义传感器变量
Sensor acceSensor, proxiSensor, lightSensor; //申明加速度传感器、距离传感器、光传感器。
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//获取手机中的sensor
//如果需要获取框架层中的manager
//就可以使用如下方法
//getSystemService(Context.xxx)
mSensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
mSensorList = mSensorManager.getSensorList(Sensor.TYPE_ALL); //获取手机已有传感器信息
// Toast.makeText(this, "当前sensor数目 : " + mSensorList.size(), Toast.LENGTH_LONG).show();
regAcce = (Button)findViewById(R.id.btn_reg_acce_main);
regAcce.setOnClickListener(this);
unregAcce = (Button)findViewById(R.id.btn_unreg_acce_main);
unregAcce.setOnClickListener(this);
regProxi = (Button)findViewById(R.id.btn_reg_proxi_main);
regProxi.setOnClickListener(this);
unregProxi = (Button)findViewById(R.id.btn_unreg_proxi_main);
unregProxi.setOnClickListener(this);
regLight = (Button)findViewById(R.id.btn_reg_light_main);
regLight.setOnClickListener(this);
unregLight = (Button)findViewById(R.id.btn_unreg_light_main);
unregLight.setOnClickListener(this);
tvAcce0 = (TextView)findViewById(R.id.tv_acce_value0_main);
tvAcce1 = (TextView)findViewById(R.id.tv_acce_value1_main);
tvAcce2 = (TextView)findViewById(R.id.tv_acce_value2_main);
tvProxi0 = (TextView)findViewById(R.id.tv_proxi_value0_main);
tvProxi1 = (TextView)findViewById(R.id.tv_proxi_value1_main);
tvProxi2 = (TextView)findViewById(R.id.tv_proxi_value2_main);
tvLight0 = (TextView)findViewById(R.id.tv_light_value0_main);
tvLight1 = (TextView)findViewById(R.id.tv_light_value1_main);
tvLight2 = (TextView)findViewById(R.id.tv_light_value2_main);
//获取ListView
lv = (ListView)findViewById(R.id.lv_sensor_main);
//给listView设置adapter
lv.setAdapter(new MyAdapter());
//获取acce传感器
acceSensor = mSensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER).get(0);
//获取proxi传感器
proxiSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
//获取light传感器
lightSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
}
class MyAdapter extends BaseAdapter {
public int getCount() {
// TODO Auto-generated method stub
return mSensorList.size();
}
public Object getItem(int position) {
// TODO Auto-generated method stub
return mSensorList.get(position);
}
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
if(convertView == null) {
//创建每一行的布局
//将xml文件转换为View对象
convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.list_view_item, parent, false);
}
//设置每一行的内容
TextView tv = (TextView)convertView.findViewById(R.id.tv_sensor_info_item);
tv.setText("name = " + mSensorList.get(position).getName() + " type = " + mSensorList.get(position).getType());
return convertView;
}
}
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId()) {
case R.id.btn_reg_acce_main:
//注册监听器
//第一个参数,监听器
//第二个参数,传感器对象
//第三个参数,灵敏度
mSensorManager.registerListener(this, acceSensor, SensorManager.SENSOR_DELAY_NORMAL);
break;
case R.id.btn_unreg_acce_main:
//注销监听器
mSensorManager.unregisterListener(this, acceSensor);
break;
case R.id.btn_reg_proxi_main:
//注册监听器
//第一个参数,监听器
//第二个参数,传感器对象
//第三个参数,灵敏度
mSensorManager.registerListener(this, proxiSensor, SensorManager.SENSOR_DELAY_NORMAL);
break;
case R.id.btn_unreg_proxi_main:
//注销监听器
mSensorManager.unregisterListener(this, proxiSensor);
break;
case R.id.btn_reg_light_main:
//注册监听器
//第一个参数,监听器
//第二个参数,传感器对象
//第三个参数,灵敏度
mSensorManager.registerListener(this, lightSensor, SensorManager.SENSOR_DELAY_NORMAL);
break;
case R.id.btn_unreg_light_main:
//注销监听器
mSensorManager.unregisterListener(this, lightSensor);
break;
default:
break;
}
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
//当传感器数据发生改变时被回调
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
switch(event.sensor.getType()) {
//type为1表示是加速度传感器上报的数据
case 1:
tvAcce0.setText("value[0]=" + event.values[0]);
tvAcce1.setText("value[1]=" + event.values[1]);
tvAcce2.setText("value[2]=" + event.values[2]);
break;
//type为8表示距离传感器
case 8:
tvProxi0.setText("value[0]=" + event.values[0]);
tvProxi1.setText("value[1]=" + event.values[1]);
tvProxi2.setText("value[2]=" + event.values[2]);
break;
//type为5表示光传感器
case 5:
tvLight0.setText("value[0]=" + event.values[0]);
tvLight1.setText("value[1]=" + event.values[1]);
tvLight2.setText("value[2]=" + event.values[2]);
break;
}
}
}