首页 > 代码库 > Android摇一摇功能的实现

Android摇一摇功能的实现

Android利用传感器实现类似摇一摇功能

1.基本原理

      摇一摇功能基本原理是利用手机加速度传感器,当加速度到达某个值时,触发某个事件,如UI改变,手机震动,播放声音,获取数据等事件。

2.传感器原理和使用

      传感器原理和使用,可以参见上一篇博客,Android中传感器Sensor的使用

3.声音事件

    获取对象MediaPlay类  mediaPlayer=MediaPlayer.create(getApplicationContext(), R.raw.music);

    事件触发:mediaPlayer.start();

4.震动事件

     获取Vibrator对象,vibrator=(Vibrator) getSystemService(VIBRATOR_SERVICE);

     获取权限:<uses-permission android:name="android.permission.VIBRATE"/>

     事件触发: vibrator.vibrate(200);  

5.代码实现

5.1初始化管理对象SensorManager,Vibrator,MediaPlayer

1 sensorManager=(SensorManager) getSystemService(SENSOR_SERVICE);2 vibrator=(Vibrator) getSystemService(VIBRATOR_SERVICE);3 mediaPlayer=MediaPlayer.create(getApplicationContext(), R.raw.music);

R.raw.music是声音素材,raw目录下。

5.2创建传感器事件监听匿名类

 1 private SensorEventListener sensorEventListener=new SensorEventListener() { 2          3         @Override 4         public void onSensorChanged(SensorEvent event) { 5              6              7             float[] values=event.values; 8             // 一般在这三个方向的重力加速度达到40就达到了摇晃手机的状态。  9              float x = values[0]; // x轴方向的重力加速度,向右为正  10              float y = values[1]; // y轴方向的重力加速度,向前为正  11              float z = values[2]; // z轴方向的重力加速度,向上为正  12             int medumValue = http://www.mamicode.com/10;13             if(Math.abs(x) > medumValue || Math.abs(y) > medumValue || Math.abs(z) > medumValue)14             {  15                 Log.i("tag", "x="+values[0]+",y="+values[1]+",z="+values[2]);16                 vibrator.vibrate(200);  17                 Message msg=new Message();18                 msg.what=SENSOR_SHAKE;19                 handler.sendMessage(msg);20                 mediaPlayer.start();21             }22             23         }24         25         @Override26         public void onAccuracyChanged(Sensor sensor, int accuracy) {27             // TODO Auto-generated method stub28             29         }30     };

5.3Handler处理消息

 1 private Handler handler=new Handler(){ 2         @Override 3         public void handleMessage(Message msg) { 4             super.handleMessage(msg); 5             switch (msg.what) { 6             case SENSOR_SHAKE: 7                 Toast.makeText(getApplicationContext(), "手机摇晃中", Toast.LENGTH_LONG).show(); 8                  9                 break;10 11             default:12                 break;13             }14         }15     };

5.4注册和关闭监听

 1 @Override 2     protected void onResume() { 3         super.onResume(); 4         if(sensorManager!=null){ 5             sensorManager.registerListener(sensorEventListener, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL); 6          7         } 8     } 9     @Override10     protected void onPause() {11         super.onPause();12         if(sensorManager!=null){13             sensorManager.unregisterListener(sensorEventListener);14         }15     }

6.示例代码下载

http://pan.baidu.com/s/1bns5bUB

7.运行界面

Android摇一摇功能的实现