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 = 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         @Override
26         public void onAccuracyChanged(Sensor sensor, int accuracy) {
27             // TODO Auto-generated method stub
28             
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     @Override
10     protected void onPause() {
11         super.onPause();
12         if(sensorManager!=null){
13             sensorManager.unregisterListener(sensorEventListener);
14         }
15     }

6.示例代码下载

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

7.运行界面

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。