传感思维

1.传感有十种差不多

我们通过卫衣来传感

首先有位移传感工具类继承于传感监听,并在Manifest清单列表中添加

Vibrator权限

import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.provider.Settings;

/**
 * Created by Administrator on 2016/6/14.
 */
public abstract class ShakeListener implements SensorEventListener{
    private int duration=100;//采样时间间隔
    private long lastTime;//上一个采样的时间
    private float lastPointX;//上个点的X轴的加速度信息
    private float lastPointY;//上个点的Y轴的加速度信息
    private float lastPointZ;//上个点的Z轴的加速度信息
    private float shake;//单次增量
    private float totalShake;//总增量
    private float switchValue=100;//判断是否摇晃手机的最大值
    public ShakeListener(){
        init();
    }
    /**
     * 初始化赋值
     */
    private void init(){
        lastTime=0;
        lastPointX=0;
        lastPointY=0;
        lastPointZ=0;
        shake=0;
        totalShake=0;
    }

    /**
     * //当传感器的值发生变化时触发的方法
     * @param event
     */
    @Override
    public void onSensorChanged(SensorEvent event) {
         if(lastTime==0){
             lastTime=System.currentTimeMillis();
             lastPointX=event.values[SensorManager.DATA_X];
             lastPointY=event.values[SensorManager.DATA_Y];
             lastPointZ=event.values[SensorManager.DATA_Z];
         }else{
             long currentTime=System.currentTimeMillis();
             if(currentTime-lastTime>duration){
                 //第二个点
                 float x=event.values[SensorManager.DATA_X];
                 float y=event.values[SensorManager.DATA_Y];
                 float z=event.values[SensorManager.DATA_Z];
                 //每次传入的数据都存在微小的变动
                 float dx=Math.abs(x-lastPointX);
                 float dy=Math.abs(y-lastPointY);
                 float dz=Math.abs(z-lastPointZ);
                 if (dx<1){
                     dx = 0;
                 }
                 if(dy<1){
                     dy = 0;
                 }
                 if (dz<1){
                     dz = 0;
                 }
                 shake = dx + dy + dz;
                 if (shake==0){
                     //处于静止状态
                     init();
                 }
                 totalShake += shake;
                 if (totalShake > switchValue){
                     //说明是在摇晃手机
                     //机选一注彩票,并且有震动
                     shakeCreateLottery();
                     init();
                 }else{
                     lastTime = System.currentTimeMillis();
                     lastPointX=event.values[SensorManager.DATA_X];
                     lastPointY=event.values[SensorManager.DATA_Y];
                     lastPointZ=event.values[SensorManager.DATA_Z];
                 }
             }
         }
    }
    //当传感器的精度发生变化时触发该方法
    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {

    }
    public abstract  void shakeCreateLottery();
}

在Activity中添加服务
变量:
private ShakeListener shakeListener;
private SensorManager sensorManager;

private void vibrator() {
//先判断是否为空,进行调用系统服务的传感器服务
 if (vibrator == null) {
        vibrator = (Vibrator) this.getSystemService(Context.VIBRATOR_SERVICE);
    }
//震动时间
 vibrator.vibrate(200);
 }
//在onStart()之后调用onResume()
@Override
protected void onResume() {
    super.onResume();
    shakeListener = new ShakeListener() {
        @Override
        public void shakeCreateLottery() {
            screateLottery();
        }
    };
    initShake();
}
//注册传感器
 private void initShake(){
    sensorManager = (SensorManager)this.getSystemService(Context.SENSOR_SERVICE);
    sensorManager.registerListener(shakeListener,sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),sensorManager.SENSOR_DELAY_FASTEST);
}

在需要传感器时调用上方法
在最后要撤销该方法
@Override
protected void onPause() {
    super.onPause();
    sensorManager.unregisterListener(shakeListener);
}








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值