上一篇写了如何在线匹配歌词,http://blog.csdn.net/huweigoodboy/article/details/39878063,现在来讲讲摇一摇功能开发。

代码地址:https://github.com/huweigoodboy/SweetMusicPlayer

同样用了一个Service去实现摇一摇。

ShakeListener继承自SensorEventListener,当加速度感应器感受到重力变化,就去通知onShakeListener调用onShake(),

在震动的同时随机一首歌。

一,加速度感应器

在这里需要设置一个速度阈值和时间间隔,控制一定的时间间隔才能触发第二次震动,还有感受速度太小也不去onShake()。

1)得到sensorManager。

sensorManager=(SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE);

2)得到sensor

sensor=sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

3)注册感应监听

sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_NORMAL);

package com.huwei.sweetmusicplayer.ui.listeners;import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;public class ShakeListener implements SensorEventListener {//速度阈值private static final int SPEED_SHAKEHOLD=3000;//检测时间间隔private static final int UPTATE_INTERVAL_TIME = 70;//传感器管理器private SensorManager sensorManager;//传感器 private Sensor sensor;//重力感应监听器private OnShakeListener onShakeListener;// 上下文private Context mContext;// 手机上一个位置时重力感应坐标private float lastX;private float lastY;private float lastZ;// 上次检测时间private long lastUpdateTime;public ShakeListener(Context mContext) {super();this.mContext = mContext;start();}public void start(){sensorManager=(SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE);if(sensorManager!=null){//获得加速度感应器sensor=sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);}if(sensor!=null){//注册加速器,并且设置速率sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_NORMAL);}}// 设置重力感应监听器public void setOnShakeListener(OnShakeListener listener) {onShakeListener = listener;}public void stop(){sensorManager.unregisterListener(this);}//重力感应到变化@Overridepublic void onSensorChanged(SensorEvent event) {// TODO Auto-generated method stublong currentUpdateTime=System.currentTimeMillis();long timeInterval=currentUpdateTime-lastUpdateTime;if(timeInterval<UPTATE_INTERVAL_TIME){return;}lastUpdateTime=currentUpdateTime;float x=event.values[0];float y=event.values[1];float z=event.values[2];float deltaX=x-lastX;float deltaY=y-lastY;float deltaZ=z-lastZ;lastX=x;lastY=y;lastZ=z;double speed=Math.sqrt(deltaX*deltaX+deltaY*deltaY*deltaZ*deltaZ)/timeInterval*10000;if(speed>SPEED_SHAKEHOLD){onShakeListener.onShake();}}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {// TODO Auto-generated method stub}// 摇晃监听接口public interface OnShakeListener {public void onShake();}}

二,控制震动

得到Vibrator对象

vibrator=(Vibrator) getBaseContext().getSystemService(Context.VIBRATOR_SERVICE);

震动方法有两种

vibrator.vibrate(500);震动多少毫秒

或者设置一个震动周期的数组

vibrator.vibrate(new long[]{100,200,100,200}, -1);  //停止,震动,停止,震动

-1表示重复次数为不重复

package com.huwei.sweetmusicplayer.services;import com.huwei.sweetmusicplayer.datamanager.MusicManager;
import com.huwei.sweetmusicplayer.ui.listeners.ShakeListener;import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import android.os.Vibrator;
import android.util.Log;public class ShakeService extends Service {private static final String TAG="ShakeService";private ShakeListener mShakeListener;private Vibrator vibrator;@Overridepublic void onCreate() {// TODO Auto-generated method stubsuper.onCreate();vibrator=(Vibrator) getBaseContext().getSystemService(Context.VIBRATOR_SERVICE);mShakeListener=new ShakeListener(getBaseContext());mShakeListener.setOnShakeListener(new ShakeListener.OnShakeListener() {@Overridepublic void onShake() {// TODO Auto-generated method stubmShakeListener.stop();startVibrator();//vibrator.cancel();mShakeListener.start();}} );}//震动函数void startVibrator(){Log.i(TAG,"shake");vibrator.vibrate(500);MusicManager.getInstance().random_a_song();}@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn null;}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {// TODO Auto-generated method stubmShakeListener.start();return super.onStartCommand(intent, flags, startId);}@Overridepublic void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();mShakeListener.stop();}}

android音乐播放器开发 SweetMusicPlayer 摇一摇换歌相关推荐

  1. android音乐播放器开发 SweetMusicPlayer 实现思路

    代码地址:https://github.com/huweigoodboy/SweetMusicPlayer 一,实现效果 目前还不是特别完善,主要有以下几个功能, 1,加载歌曲列表(实现a-z字母检索 ...

  2. android音乐播放器开发 SweetMusicPlayer 播放本地音乐

    代码地址:https://github.com/huweigoodboy/SweetMusicPlayer 上一篇写了加载歌曲列表,http://blog.csdn.net/huweigoodboy/ ...

  3. android音乐播放器开发 SweetMusicPlayer 载入歌曲列表

    上一篇写了播放器的总体实现思路,http://blog.csdn.net/huweigoodboy/article/details/39855653,如今来总结下载入歌曲列表. 代码地址:https: ...

  4. android音乐播放器开发 SweetMusicPlayer 加载歌曲列表

    上一篇写了播放器的整体实现思路,http://blog.csdn.net/huweigoodboy/article/details/39855653,现在来总结下加载歌曲列表. 代码地址:https: ...

  5. android音乐播放器开发 SweetMusicPlayer 智能匹配本地歌词

    上一篇写了使用MediaPlayer播放音乐,http://blog.csdn.net/huweigoodboy/article/details/39861539. 代码地址:https://gith ...

  6. Android音乐播放器开发(2)—登录

    1. 说明 本音乐播放器基于Android开发,原为我和另外两个小伙伴在上学期间一起做的一个小项目,近来有时间整理一下.之前我有文章已经介绍了播放界面的功能实现(Android音乐播放器开发),但介绍 ...

  7. Android音乐播放器开发(3)—注册

    1. 说明 本音乐播放器基于Android开发,原为我和另外两个小伙伴在上学期间一起做的一个小项目,近来有时间整理一下.之前我有文章已经介绍了播放界面的功能实现(Android音乐播放器开发),但介绍 ...

  8. Android音乐播放器开发(4)—修改密码

    1. 说明 本音乐播放器基于Android开发,原为我和另外两个小伙伴在上学期间一起做的一个小项目,近来有时间整理一下.之前我有文章已经介绍了播放界面的功能实现(Android音乐播放器开发),但介绍 ...

  9. Android音乐播放器开发(6)—ListView组件创建歌曲播放列表(内含原理分析)

    1. 说明 源码已同步到Gitee仓库,GitHub仓库,觉得还不错的话帮忙点个"star"吧,非常感谢. 以往的文章 服务端:Android音乐播放器开发–服务端 登录:Andr ...

最新文章

  1. 计算机图形学——三角形网格
  2. R语言构建xgboost模型:使用xgb.DMatrix保存、加载数据集、使用getinfo函数抽取xgb.DMatrix结构中的数据
  3. R语言使用ggplot2包使用geom_violin函数绘制分组小提琴图(配置填充色)实战
  4. lzg_ad:使用Virtual PC 部署和测试XP Embedded 发布镜像
  5. Unity 内建数据索引
  6. SSH框架整合截图总结(三)
  7. Java的JAR包, EAR包 ,WAR包内部结构
  8. 数据降维降维(二)----Laplacian Eigenmaps
  9. 神经网络ANN分类器及OpenCV实现
  10. 产品经理岗位职责说明_11份公司高层管理人员的岗位职责说明书,改改就能用,拿去参考...
  11. Ds918 ds3615 ds3617区别_苹果678有什么区别
  12. java自己写母版_Java 创建并用应用幻灯片母版
  13. 如何入门Python之Python基础教程详解
  14. 用python获得图片定位信息
  15. 全中国的海鲜主要有这四个省份扛着。。
  16. 什么是精灵图?如何使用精灵图
  17. 会声会影如何去除视频黑边
  18. Python 爬金十数据
  19. 手动挡五个档位示意图_手动挡汽车档位图解?
  20. Go语言爱好者周刊:第 142 期

热门文章

  1. 27部优秀的黑客纪录片
  2. 多种退出vim的方法
  3. 【CicadaPlayer】av find stream info 探测framerate 分辨率
  4. MAC电脑Command键调换为Control键的方法
  5. 机器学习与数据挖掘 课程作业 基于数据驱动的空调结霜程度检测方法研究
  6. 微信公众号发送小程序卡片_小程序、公众号客服消息可以发送小程序卡片啦
  7. 一个非常好用而且通用的Audio dump工具
  8. 【元胞自动机】保守策略元胞自动机三车道(不开放辅路,软件园影响)交通流模型【含Matlab源码 1294期】
  9. Linux系统Ubuntu 20.04 ,cuda=11.1。实现C3D代码环境。
  10. 影像组学——一个入门级汇报