Android调用传感器和震动

来源:互联网 发布:河北11选五任六数据 编辑:程序博客网 时间:2024/06/02 07:59

介绍Sensor类

SDK只有一句介绍“Class representing a sensor. Use getSensorList(int) to get the list of available Sensors.”,表示一个感应器的类,可以使用getSensorList方法(此方法属于接下来要讲的SensorManager)获得所有可用的感应器,该方法返回的是一个List
下面的列表显示了,Sensor所提供的所有服务
Constants
int TYPE_ACCELEROMETER A constant describing an accelerometer sensor type.
//三轴加速度感应器 返回三个坐标轴的加速度 单位m/s2
int TYPE_ALL A constant describing all sensor types.
//用于列出所有感应器
int TYPE_GRAVITY A constant describing a gravity sensor type.
//重力感应器
int TYPE_GYROSCOPE A constant describing a gyroscope sensor type
//陀螺仪 可判断方向 返回三个坐标轴上的角度
int TYPE_LIGHT A constant describing an light sensor type.
//光线感应器 单位 lux 勒克斯
int TYPE_LINEAR_ACCELERATION A constant describing a linear acceleration sensor type.
//线性加速度
int TYPE_MAGNETIC_FIELD A constant describing a magnetic field sensor type.
//磁场感应 返回三个坐标轴的数值 微特斯拉
int TYPE_ORIENTATION This constant is deprecated. use SensorManager.getOrientation() instead.
//方向感应器 已过时 可以使用方法获得
int TYPE_PRESSURE A constant describing a pressure sensor type
//压力感应器 单位 千帕斯卡
int TYPE_PROXIMITY A constant describing an proximity sensor type.
//距离传感器
int TYPE_ROTATION_VECTOR A constant describing a rotation vector sensor type.
//翻转传感器
int TYPE_TEMPERATURE A constant describing a temperature sensor type
//温度传感器 单位 摄氏度
此类中包含的方法都是get型的 用来获取所选sensor的一些属性,sensor类一般不需要new而是通过SensorManager的方法获得

加速度感应器

可以通过这个感应器获得三个浮点型
x-axis
y-axis
z-axis
这里写图片描述

X Y Z分别对应values[0]到[2]
X表示左右移动的加速度
Y表示前后移动的加速度
Z表示垂直方向的加速度 (测试时发现,将手机置于水平桌面稳定后 XY均为0 Z的值为9.4 约等于重力加速度,依次可以做一个简单的算法实现重力测力计。)

//申请震动权限<uses-permission android:name="android.permission.VIBRATE"/>
package com.zingon.ztc.gpstry;import android.content.Context;import android.hardware.SensorManager;import android.location.LocationManager;import android.os.Bundle;import android.os.Vibrator;import android.support.v7.app.AppCompatActivity;import android.widget.TextView;public class MainActivity extends AppCompatActivity {    TextView inf;    //感应器管理器,所有感应器都可以通过它获得    SensorManager sm;    //震动    Vibrator vb;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        inf=(TextView)findViewById(R.id.inf);        //获得系统服务        sm= (SensorManager) getSystemService(Context.SENSOR_SERVICE);        vb= (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);        new SensorTry(sm,inf,vb).run();    }}
package com.zingon.ztc.gpstry;import android.hardware.Sensor;import android.hardware.SensorEvent;import android.hardware.SensorEventListener;import android.hardware.SensorManager;import android.os.Vibrator;import android.util.Log;import android.widget.TextView;/** * Created by ztc on 16-3-9. */public class SensorTry extends Thread{    SensorManager sm;    String TAG = "sensor";    TextView inf;    Vibrator vb;    float x,y,z;    public SensorTry(SensorManager sm,TextView inf,Vibrator vb){        this.sm=sm;        this.inf=inf;        this.vb=vb;    }    @Override    public void run() {    //获得加速度传感器        Sensor sensor=sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);        //注册监听器        sm.registerListener(myListener, sensor, SensorManager.SENSOR_DELAY_NORMAL);        try {            Thread.sleep(1000);        } catch (InterruptedException e) {            e.printStackTrace();        }    }    //监听器    SensorEventListener myListener=new SensorEventListener() {        @Override        public void onSensorChanged(SensorEvent event) {            if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){                //图解中已经解释三个值的含义                //当值变化超过 1 时,震动                if(Math.abs(x-event.values[0])>=1||Math.abs(y-event.values[1])>=1||Math.abs(z-event.values[2])>=1) {                    x = event.values[0];                    y = event.values[1];                    z = event.values[2];                    Log.i(TAG,"onSensorChanged");                    Log.i(TAG, "\n heading " + x);                    Log.i(TAG, "\n pitch " + y);                    Log.i(TAG, "\n roll " + z);                    inf.setText("设备重力传感器\n\nX:");                    inf.append(String.valueOf((int) x));                    inf.append("\nY:");                    inf.append(String.valueOf((int) y));                    inf.append("\nZ:");                    inf.append(String.valueOf((int) z));                    // 停止 开启 停止 开启                    long[] pattern = {100, 400, 100, 400};                    vb.vibrate(pattern, -1);                }            }        }        @Override        public void onAccuracyChanged(Sensor sensor, int accuracy) {            Log.i(TAG, "onAccuracyChanged");        }    };}

效果

手机移动,就会震动
0 0
原创粉丝点击