Android摇一摇实现

本文介绍了Android中实现摇一摇功能的详细步骤,包括利用手机加速传感器获取x、y、z轴加速度,设置灵敏度,过滤快速回调,判断加速度变化,结合手机震动服务,并在`onResume()`和`onPause()`中管理监听器,以确保在前台运行。此外,还提供了一个简单的Demo源码链接。
摘要由CSDN通过智能技术生成

实现效果图

===================

一个效果图,不重要
此Demo可以实时设置调整灵敏度,方便测试。


摇一摇原理简介

手机摇一摇的实现,无非就是利用手机上的加速传感器,得到x、y、z轴三个方向的加速度。通过判断加速度的状态,来判断用户是否摇动了手机。而因为重力加速度一直存在,所以在一个方向上的加速度一直是9点多,设计的时候我们要考虑到这一点。


实现过程

第一步:先获得加速度传感器

sensorManager=(SensorManager)getSystemService(SENSOR_SERVICE);
        if(sensorManager==null) return;
        sensor=(sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER));

上面做了简单判断,防止出空指针
我这里用到了手机震动,所以还需要获得手机震动服务

 vibrator=(Vibrator)getSystemService(VIBRATOR_SERVICE);

手机振动需要添加限权:

<uses-permission android:name="android.permission.VIBRATE"/>

第二步: 为传感器设置好监听(布局文件和setViews代码比较简单,暂时不在这里写了,会出现在下面的源码中

listener=new SensorEventListener() {
            @Override
            public void onSensorChanged(SensorEvent event) {
                try{
                    long currentTime=System.currentTimeMillis();
                    long timeInterval=Long.valueOf(etTimeInterval.getText().toString());
                    if(timeInterval>currentTime-lastTime) return;//如果两次回调间隔过小,直接忽略
                    float[] values=event.values;
                    float x=values[0];
                    float y=values[1];
                    float z=values[2];
                    if(Math.abs(z)>11||Math.abs(x)>5||Math.abs(y)>3) {
                        Log.i("TAG","x:"+x);
                        Log.i("TAG","y:"+y);
                        Log.i("TAG","z:"+z);
                    }
                    float deltaX=x-lastX;
                    float deltaY=y-lastY;
                    float deltaZ=z-lastZ;

                    lastX=x;
                    lastY=y;
                    lastZ=z;
                    double speed=(Math.sqrt(deltaX*deltaX+deltaY*deltaY+deltaZ*deltaZ)/timeInterval)*100;
                    if(speed>Double.valueOf(etSpeed.getText().toString())){
                        vibrator.vibrate(300);
                        
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值