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         @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摇一摇功能的实现_第1张图片

更多相关文章

  1. Android特色开发(1):传感器
  2. [Android] View和ViewGroup事件分发机制
  3. 浅谈Android 事件分发机制(一)
  4. 对android里布局文件当中的TextView对象设置事件监听,但是不响应
  5. [转]Android 应用初始化及窗体事件(按键)的分发 [此博文包含图片]
  6. android处理键盘事件之物理按键 (一)
  7. Android触摸事件的分发处理
  8. android 双击事件

随机推荐

  1. Android开发指南-框架主题-安全和许可
  2. 2020互联网寒冬下,一个 Android(安卓)程序
  3. Android(安卓)纯代码化编码1_关于布局
  4. Android(安卓)Ice Cream Sandwich 两分钟
  5. Android中各种Adapter的介绍及使用
  6. [Android] [Java] Process 创建+控制+分
  7. Android(安卓)WebView调用本地相册的方法
  8. 一张图告诉你Android手机系统更新多么混
  9. Android(安卓)UI设计秘笈
  10. 5条针对Honeycomb的UI设计建议