首页 > 代码库 > 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摇一摇功能的实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。