android音樂播放器開發 SweetMusicPlayer 搖一搖換歌

來源:互聯網
上載者:User

標籤:android   安卓   播放器   介面設計   音樂   

上一篇寫了如何線上匹配歌詞,http://blog.csdn.net/huweigoodboy/article/details/39878063,現在來講講搖一搖功能開發。


同樣用了一個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 stub mShakeListener.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 搖一搖換歌

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.