摇一摇震动或播放音频案例以及分析详情
2016-12-30 11:00
302 查看
一、首先我们要知道摇一摇的使用是应用传感器来实现的:
前言了解:
传感器
一、传感器的类的结构:
1.包:android.hardware
2.SensorManager类:传感器的服务类
实例化:context.getSystemService(String name)
方法:
1)、Sensor getDefaultSensor(int type)
根据传感器的类型获取具体的传感器的对象:
参数:type传感器的类型
值:Sensor.TYPE_ACCELEROMETER:加速传感器
2)、registerListener(SensorEventListener listener,Sensor sensor,int rate) 注册传感器
参数: listener:传感器事件的监听事件
sensor:具体的传感器
rate:数据延误的时间
值:SENSOR_DELAY_FASTEST:延迟时间0微妙
SENSOR_DELAY_GAME:延迟时间20000微妙
SENSOR_DELAY_UI:延迟时间66667微妙
SENSOR_DELAY_NORMAL:延迟的时间2000000微妙
3.unregisterListener(SensorEventListener listener,Sensor sensor) 取消注册
参数:listener:事件
sensor:具体传感器的对象
二、Sensor类:代表的是具体的传感器,获取传感器的信息
三、SensorEvent类:代表的是传感器的事件
四、sensorEventListener接口:代表的是传感器的监听事件
震动效果
一、vibrator类:震动的服务类
实例化:context.getSystemService(java.lang.Stirng)
方法:
1、vibrate(long [] pattern,int repeat)
参数:pattern:设置震动的时间间隔和持续时间
repeat:设置震动重复的次数
2、cancel():取消震动
音乐设置
二、mediaPlayer类:播放音频和视频文件
实例化方式:
1.静态方法:static MediaPlayer create(Context context,int resid) 根据音频文件的标识得到MediapLlayer对象
2.构造方法:1.mediaPlayer()方法:
1.setDataSource(FileDescriptor fd,long offset,int length) 设置音频文件资源
参数:fd:音频文件
offest:初始偏移量
length:音频文件长度
注意:严格按照生命周期进行实现
方法:1.start():播放音频文件
二、代码分析:
1、创建一个ShakeSensor的传感器类实现SensorEventListener接口:
后续工作呢!就自己做了啊! 就是添加一个简单动画效果以及显示弹窗什么的.......
前言了解:
传感器
一、传感器的类的结构:
1.包:android.hardware
2.SensorManager类:传感器的服务类
实例化:context.getSystemService(String name)
方法:
1)、Sensor getDefaultSensor(int type)
根据传感器的类型获取具体的传感器的对象:
参数:type传感器的类型
值:Sensor.TYPE_ACCELEROMETER:加速传感器
2)、registerListener(SensorEventListener listener,Sensor sensor,int rate) 注册传感器
参数: listener:传感器事件的监听事件
sensor:具体的传感器
rate:数据延误的时间
值:SENSOR_DELAY_FASTEST:延迟时间0微妙
SENSOR_DELAY_GAME:延迟时间20000微妙
SENSOR_DELAY_UI:延迟时间66667微妙
SENSOR_DELAY_NORMAL:延迟的时间2000000微妙
3.unregisterListener(SensorEventListener listener,Sensor sensor) 取消注册
参数:listener:事件
sensor:具体传感器的对象
二、Sensor类:代表的是具体的传感器,获取传感器的信息
三、SensorEvent类:代表的是传感器的事件
四、sensorEventListener接口:代表的是传感器的监听事件
震动效果
一、vibrator类:震动的服务类
实例化:context.getSystemService(java.lang.Stirng)
方法:
1、vibrate(long [] pattern,int repeat)
参数:pattern:设置震动的时间间隔和持续时间
repeat:设置震动重复的次数
2、cancel():取消震动
音乐设置
二、mediaPlayer类:播放音频和视频文件
实例化方式:
1.静态方法:static MediaPlayer create(Context context,int resid) 根据音频文件的标识得到MediapLlayer对象
2.构造方法:1.mediaPlayer()方法:
1.setDataSource(FileDescriptor fd,long offset,int length) 设置音频文件资源
参数:fd:音频文件
offest:初始偏移量
length:音频文件长度
注意:严格按照生命周期进行实现
方法:1.start():播放音频文件
二、代码分析:
1、创建一个ShakeSensor的传感器类实现SensorEventListener接口:
/** * Created by Administrator on 2016/12/29. * 实现传感器-加速度传感器 * @author diaobao-刘平 */ public class ShakeSensor implements SensorEventListener { public ShakeSensor() { } private static final String TAG = "ShakeSensor"; private static final int SPEED_SHRESHOLD = 4800; private Context mContext; private SensorManager mSensorManager; private Sensor mSensor; //加速度传感器 private long last_time; //记录的最后的时间 private float last_x;//记录最后一次的值 private float last_y;//记录最后一次的值 private float last_z;//记录最后一次的值 private OnshakeListener mOnShakeListener; public ShakeSensor(Context context) { mContext = context; } public void init() { mSensorManager = (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE); mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); //注册传感器 mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_FASTEST); } public void unRegisterListener() { mSensorManager.unregisterListener(this, mSensor); } @Override public void onSensorChanged(SensorEvent event) { long currentIime = System.currentTimeMillis(); if (currentIime - last_time > 10) { //两次摇动的时间间隔 long timeDistance = currentIime - last_time; last_time = currentIime; //当前值 float x = event.values[0]; //x轴变化的值 float y = event.values[1]; //y轴变化的值 float z = event.values[2]; //z轴变化的值 Log.e(TAG, "onSensorChanged: x+" + x + "'--" + y + "--" + z); double speed; //速度的阈值 double absValue = Math.abs(x + y + z - last_x - last_y - last_z); speed = absValue / timeDistance * 10000; if (speed > SPEED_SHRESHOLD) { //当xyz轴的值达到一定的值是进行后续的操作 if (null != mOnShakeListener) { mOnShakeListener.onShake(); } } last_x = x; last_y = y; last_z = z; } } @Override public void onAccuracyChanged(Sensor sensor, int i) { } public void setOnShakeListener(OnshakeListener onShakeListener) { mOnShakeListener = onShakeListener; } public interface OnshakeListener { void onShake(); } }2、在activity中调用方法设置以及实现简单的震动和播放音频文件:注意这里的音频文件是放在raw目录下的
public class MainActivity extends AppCompatActivity implements ShakeSensor.OnshakeListener { private ShakeSensor mShakeSensor; private Vibrator vibrator; //设置震动 private MediaPlayer mediaPlayer; //设置音频 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mShakeSensor = new ShakeSensor(this); //注册一个回调事件 mShakeSensor.setOnShakeListener(this); mShakeSensor.init(); } @Override public void onShake() { //实现一些操作 Toast t = Toast.makeText(MainActivity.this, "摇一摇成功", Toast.LENGTH_SHORT); t.setGravity(Gravity.CENTER, 0, 0); //设置位置 t.show(); SetYinping(); } private void setZhendong() { /* * 想设置震动大小可以通过改变pattern来设定,如果开启时间太短,震动效果可能感觉不到 *方法:vibrate(long [] pattern,int repeat) 参数:pattern:设置震动的时间间隔和持续时间 repeat:设置震动重复的次数 * */ vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); long[] pattern = {100, 400, 100, 400}; // 停止 开启 停止 开启 vibrator.vibrate(pattern, 2); //重复两次上面的pattern 如果只想震动一次,index设为-1 } private void SetYinping() { mediaPlayer = MediaPlayer.create(this, R.raw.dd); mediaPlayer.start(); // SoundPool soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 100); // int load = soundPool.load(this, R.raw.dd, 1); } public void onStop() { super.onStop(); vibrator.cancel(); //取消震动 mediaPlayer.stop(); } //设置取消的按钮点击事件 public void onClick(View v) { // vibrator.cancel(); //取消震动 // mediaPlayer.stop();//音频暂停 } }3、添加震动权限:
<uses-permission android:name="android.permission.VIBRATE" /> <!--设置震动的权限 -->
后续工作呢!就自己做了啊! 就是添加一个简单动画效果以及显示弹窗什么的.......
相关文章推荐
- HTML5摇一摇以及音频播放问题优化总结
- android 音频播放 以及 二维码模块中音频播放和震动(vibrate)的实现
- iOS几个功能:1.摇一摇;2.震动;3.简单的摇动动画;4.生成二维码图片;5.发送短信;6.播放网络音频等
- 关于ios里的摇一摇以及播放声音和震动
- 用android来实现图片的绘制以及旋转缩放案例分析
- ios播放系统自带音效以及震动
- 线程高级应用-心得3-线程范围内的共享变量以及应用场景及面试题案例分析
- struts2.X心得2--第一个struts2案例分析以及整合c3p0连接数据库案例分析
- 用android来实现图片的绘制以及旋转缩放案例分析
- iOS App运行在后台实现定位以及播放音频功能
- android中AudioRecord采集音频的参数说明以及audioTrack的播放
- 案例分析---2014年1月21日全国DNS污染始末以及分析
- FFMPEG + SDL音频播放分析
- CPU使用率高的原因和解决方法以及案例分析
- java基础之short案例分析以及final关键字
- java基础之short案例分析以及final关键字
- FFMPEG + SDL音频播放分析
- android stagefright 播放MP3音频 打印信息分析
- WINCE频谱分析资料 以及音频开发资料
- struts2.X心得7--接收请求参数和struts类型转换介绍以及案例分析