android音乐播放器开发 SweetMusicPlayer 摇一摇换歌
上一篇写了如何在线匹配歌词,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 摇一摇换歌相关推荐
- android音乐播放器开发 SweetMusicPlayer 实现思路
代码地址:https://github.com/huweigoodboy/SweetMusicPlayer 一,实现效果 目前还不是特别完善,主要有以下几个功能, 1,加载歌曲列表(实现a-z字母检索 ...
- android音乐播放器开发 SweetMusicPlayer 播放本地音乐
代码地址:https://github.com/huweigoodboy/SweetMusicPlayer 上一篇写了加载歌曲列表,http://blog.csdn.net/huweigoodboy/ ...
- android音乐播放器开发 SweetMusicPlayer 载入歌曲列表
上一篇写了播放器的总体实现思路,http://blog.csdn.net/huweigoodboy/article/details/39855653,如今来总结下载入歌曲列表. 代码地址:https: ...
- android音乐播放器开发 SweetMusicPlayer 加载歌曲列表
上一篇写了播放器的整体实现思路,http://blog.csdn.net/huweigoodboy/article/details/39855653,现在来总结下加载歌曲列表. 代码地址:https: ...
- android音乐播放器开发 SweetMusicPlayer 智能匹配本地歌词
上一篇写了使用MediaPlayer播放音乐,http://blog.csdn.net/huweigoodboy/article/details/39861539. 代码地址:https://gith ...
- Android音乐播放器开发(2)—登录
1. 说明 本音乐播放器基于Android开发,原为我和另外两个小伙伴在上学期间一起做的一个小项目,近来有时间整理一下.之前我有文章已经介绍了播放界面的功能实现(Android音乐播放器开发),但介绍 ...
- Android音乐播放器开发(3)—注册
1. 说明 本音乐播放器基于Android开发,原为我和另外两个小伙伴在上学期间一起做的一个小项目,近来有时间整理一下.之前我有文章已经介绍了播放界面的功能实现(Android音乐播放器开发),但介绍 ...
- Android音乐播放器开发(4)—修改密码
1. 说明 本音乐播放器基于Android开发,原为我和另外两个小伙伴在上学期间一起做的一个小项目,近来有时间整理一下.之前我有文章已经介绍了播放界面的功能实现(Android音乐播放器开发),但介绍 ...
- Android音乐播放器开发(6)—ListView组件创建歌曲播放列表(内含原理分析)
1. 说明 源码已同步到Gitee仓库,GitHub仓库,觉得还不错的话帮忙点个"star"吧,非常感谢. 以往的文章 服务端:Android音乐播放器开发–服务端 登录:Andr ...
最新文章
- 计算机图形学——三角形网格
- R语言构建xgboost模型:使用xgb.DMatrix保存、加载数据集、使用getinfo函数抽取xgb.DMatrix结构中的数据
- R语言使用ggplot2包使用geom_violin函数绘制分组小提琴图(配置填充色)实战
- lzg_ad:使用Virtual PC 部署和测试XP Embedded 发布镜像
- Unity 内建数据索引
- SSH框架整合截图总结(三)
- Java的JAR包, EAR包 ,WAR包内部结构
- 数据降维降维(二)----Laplacian Eigenmaps
- 神经网络ANN分类器及OpenCV实现
- 产品经理岗位职责说明_11份公司高层管理人员的岗位职责说明书,改改就能用,拿去参考...
- Ds918 ds3615 ds3617区别_苹果678有什么区别
- java自己写母版_Java 创建并用应用幻灯片母版
- 如何入门Python之Python基础教程详解
- 用python获得图片定位信息
- 全中国的海鲜主要有这四个省份扛着。。
- 什么是精灵图?如何使用精灵图
- 会声会影如何去除视频黑边
- Python 爬金十数据
- 手动挡五个档位示意图_手动挡汽车档位图解?
- Go语言爱好者周刊:第 142 期
热门文章
- 27部优秀的黑客纪录片
- 多种退出vim的方法
- 【CicadaPlayer】av find stream info 探测framerate 分辨率
- MAC电脑Command键调换为Control键的方法
- 机器学习与数据挖掘 课程作业 基于数据驱动的空调结霜程度检测方法研究
- 微信公众号发送小程序卡片_小程序、公众号客服消息可以发送小程序卡片啦
- 一个非常好用而且通用的Audio dump工具
- 【元胞自动机】保守策略元胞自动机三车道(不开放辅路,软件园影响)交通流模型【含Matlab源码 1294期】
- Linux系统Ubuntu 20.04 ,cuda=11.1。实现C3D代码环境。
- 影像组学——一个入门级汇报