手机摇一摇实现功能

来源:互联网 发布:22周b超数据 编辑:程序博客网 时间:2024/04/28 19:10

1) SensorManager

这是一个管理传感器的类;

Context.getSystemService(SENSOR_SERVICE)得到SensorManager ,有了它你就可以管理传感器了

2) Sensor编程的一般步骤

1.取得SensorManager

sensorManager= (SensorManager) getBaseActivity().getSystemService(Service.SENSOR_SERVICE);

2.实现接口SensorEventListener

privateSensorEventListener mSensorEventListener= new SensorEventListener() {
    @Override
    public voidonSensorChanged(SensorEvent event) {
        int sensorType = event.sensor.getType();
        float[] values = event.values;
        if (sensorType == Sensor.TYPE_ACCELEROMETER) {
            if ((Math.abs(values[0]) >17 || Math.abs(values[1]) >17 || Math
                    .abs(values[2]) >17)) {
                currShakeCount++;
                shakeTime =$.util.dateNow().getTimeInMillis();
            }
        }
        long curr = $.util.dateNow().getTimeInMillis();
        if (shakeTime!= 0 && curr - shakeTime>= SPEED_SHRESHOLD&& currShakeCount> MAX_SHAKE_COUNT) {
            shakeTime =0;
            currShakeCount =0;
            handler.sendEmptyMessage(1);
        }
    }

    @Override
    public voidonAccuracyChanged(Sensor sensor, intaccuracy) {

    }
};

 

3.注册SensorListener

sensorManager.registerListener(mSensorEventListener,sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
        sensorManager.SENSOR_DELAY_NORMAL);

 

其中第三个参数是延迟时间的精密度。

4.取消注册SensorManager

sensorManager.unregisterListener(mSensorEventListener);

5.实现摇一摇逻辑

privateHandler handler = new Handler() {
    @Override
    public voidhandleMessage(Message msg) {
        super.handleMessage(msg);
        switch (msg.what) {
            case 1:
                setRlJimingVisible();
                $.openLoading();

                nameService.jiming(nameOptionManager.getNameOption(),new ServiceResultListener() {
                    @Override
                    public voidonResult(ServiceResult result) {
                        $.closeLoading();
                        if (result.isSuccess()) {
                            final ToolsJimingResult jimingResult = result.getResult(ToolsJimingResult.class);
                            setMusic();
                            $.util.threadDelayed(500,new SNThreadDelayedListener() {
                                @Override
                                public voidonFinish() {
                                    tvName.text(jimingResult.getName());
                                    tvSpell.text(jimingResult.getPinYin());
                                }
                            });
                        } else {
                            setRlJimingGone();
                            getBaseActivity().toast(result.getMessage());
                        }
                    }
                });
                break;
        }
    }
};

0 0