文章标题

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;

        }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值