android 实现手机摇一摇功能


实现接口SensorEventListener


public abstract class ShakeListenerUtils implements SensorEventListener {

    public Context context = null;
    private String TAG = "ShakeListenerUtils";

    public ShakeListenerUtils(Context context) {
        super();
        this.context = context;
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        int sensorType = event.sensor.getType();
        //values[0]:X轴,values[1]:Y轴,values[2]:Z轴
        float[] values = event.values;

        if (sensorType == Sensor.TYPE_ACCELEROMETER) {

            /*正常情况下,任意轴数值最大就在9.8~10之间,只有在突然摇动手机
              的时候,瞬时加速度才会突然增大或减少。   监听任一轴的加速度大于17即可
            */
            if ((Math.abs(values[0]) > 17 || Math.abs(values[1]) > 17 || Math
                    .abs(values[2]) > 17)) {
                Log.d(TAG, "shake");
                //根据上一次摇一摇的时间,防止连续摇手机,不停切换界面
                KVManager kvManager = new KVManager(context);
                Calendar calendar = Calendar.getInstance();
                long tmp = calendar.getTimeInMillis();
                long last = kvManager.getLong("shake_time", 0);
                kvManager.setLong("shake_time", tmp);
                if (tmp - last >= 1000)

                    onShake();
            }
        }
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
        //当传感器精度改变时回调该方法,Do nothing.
    }

    public abstract void onShake();
}


在Activity里使用


    private ShakeListenerUtils shakeListenerUtils = null;
    private SensorManager mSensorManager;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();
        initListener();
        shakeListenerUtils = new ShakeListenerUtils(this) {
            @Override
            public void onShake() {
                Toast.makeText(MainActivity.this, "onShake", Toast.LENGTH_SHORT).show();
                Intent intent = new Intent(Const.BROADCAST_ENCODE);
                sendBroadcast(intent);
            }
        };
    }


@Override
    protected void onResume() {
        super.onResume();
        //获取传感器管理服务
        mSensorManager = (SensorManager) this
                .getSystemService(Service.SENSOR_SERVICE);
        //加速度传感器
        mSensorManager.registerListener(shakeListenerUtils,
                mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
                //还有SENSOR_DELAY_UI、SENSOR_DELAY_FASTEST、SENSOR_DELAY_GAME等,
                //根据不同应用,需要的反应速率不同,具体根据实际情况设定
                SensorManager.SENSOR_DELAY_NORMAL);
    }


    @Override
    protected void onPause() {
        super.onPause();
        mSensorManager.unregisterListener(shakeListenerUtils);
    }












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值