Androidƽ̨ҡҡÇи蹦ÄÜ
ǰÐÌìÓ¡尼¿Í»§ÒªÇóÔÚ¸ßͨƽ̨7251ÉϼÓÒ»¸öÒ¡Ò¡Çи蹦ÄÜ¡£²éÁËÐ×ÊÁÏ£¬»ù±¾ÊµÏÖÁ˴˹¦ÄÜ¡£
Ö±½ÓÉÏÔ´Â룬ÓÃsvn²é¿´Ð޸ĵ㡣
Ç°ÃæÁ½¸öic_mp_shake_off_btnÊÇÁ½ÕÅͼƬ£¬×ÊÔ´Ëæ±ãÈÃUI×öÁ½Õż´¿É¡£
½ÓÏÂÀ´¾ÍÊÇaudio_player.xmlÎļþµÄÐ޸ģº£¨Õâ¸ö¾ÍÊÇÄãÒª½«ÄãµÄͼ±ê°´Å¥·ÅÔÚÄĸöµØ·½£
¶ÔÓ¦µÄÐÞ¸ÄÆäËû·Ö±æÂʵIJ¼¾ÖÎļþaudio_player.xml
½ÓÏÂÀ´Ìí¼Ó¶ÔÓ¦µÄ×Ö´£ºString.xml<†·Ÿ"http://www.bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PHByZSBjbGFzcz0="brush:java;"> Ò¡Ò»Ò¡»»¸è¹¦ÄÜÒÑ¿ªÆô. Ò¡Ò»Ò¡»»¸è¹¦ÄÜÒѹرÕ.¸÷¹úÓïÑԵķÒëÒ²×Ô¼ºÈ¥Ìí¼Ó.
½ÓÏÂÀ´ÐÞ¸ÄÒôÀÖ²¥·ÅµÄÖ÷ÀࣺMediaPlaybackActivity.java
Ê×ÏÈÒªÌí¼Ó±äÁ¿£ºprivate ImageButton mShakeButton;
½ÓÏÂÀ´ÔÙͨ¹ýfindViewByIdÀ´ÊµÀý»¯Ò¡Ò¡°´Å¥²¢Ìí¼Ó¼àÌý£»
mShakeButton = ((ImageButton) findViewById(R.id.shake)); mShakeButton.setOnClickListener(mShakeListener);
ÔÚº¯ÊýonConfigurationChangedÒ²×öͬÑùµÄ²Ù×÷£»
mShakeButton = ((ImageButton) findViewById(R.id.shake)); mShakeButton.setOnClickListener(mShakeListener);
ÏÖÔÚ¾ÍÀ´ÊµÏÖ¼àÌýµÄº¯Êý£» private View.OnClickListener mShakeListener = new View.OnClickListener() { public void onClick(View v) { shakeEnable(); } };
дshakeEnable()º¯ÊýµÄº¯ÊýÌ壻 private void shakeEnable(){if (mService == null) {return;}try {if (mService.getShakeFlag()== false){mService.setShakeFlag(true);showToast(R.string.shake_on_notif);}else{mService.setShakeFlag(false);showToast(R.string.shake_off_notif);}setShakeButtonImage();}catch (RemoteException ex) { } }ÔÚServiceConnectionÀïÐ޸İ´Å¥µÄ¿É²Ù×÷ºÍÉèÖÃͼƬ£»
дsetShakeButtonImage º¯Êý£º
private void setShakeButtonImage() { if (mService == null) return; try {if (mService.getShakeFlag() == false) {mShakeButton.setImageResource(R.drawable.ic_mp_shake_off_btn);}else{mShakeButton.setImageResource(R.drawable.ic_mp_shake_on_btn);} }catch (RemoteException ex) { } }
MediaPlaybackActivity.javaÕâ¸öÎļþÐ޸ĺÃÁË£»
½ÓÏÂÀ´¿´¿´MediaPlaybackService.java
ÏÈimport onShakeListener
import com.android.music.ShakeDetector.onShakeListener;
ÉêÃ÷±äÁ¿£º
private boolean mShakeFlag = false;
ShakeDetector mShakeDetector = null;
ÔÚonCreate()ÖдÓsharedpreferenceÖжÁÈ¡值£¬À´ÉèÖÃÊÇ·ñ´ò¿ªÒ¡Ò¡¹¦ÄÜ£»
mShakeFlag = mPreferences.getBoolean("shakeflag", false); setShakeOnorOff();
ÔÚonDestroy()ÖÐÈ¡Ïû×¢²á£º if (mShakeDetector != null) {mShakeDetector.unRegisterListener(); }ʵÏÖº¯Êý£º private void setShakeOnorOff(){ if (mShakeFlag == true){ mShakeDetector= new ShakeDetector(this); mShakeDetector.registerListener(); mShakeDetector.setOnShakeListener(new onShakeListener() { @Override public void onShake() { // TODO Auto-generated method stub if (isPlaying()){ gotoNext(true); } } }); }else{if (mShakeDetector != null) {mShakeDetector.unRegisterListener();} }Editor ed = mPreferences.edit();ed.putBoolean("shakeflag", mShakeFlag);SharedPreferencesCompat.apply(ed); } public void setShakeFlag(boolean shakeflag) { synchronized (this) { mShakeFlag = shakeflag; setShakeOnorOff(); } } public boolean getShakeFlag() { return mShakeFlag; }
ÔÚIMediaPlaybackService.StubÖÐÉèÖÃÊÇ·ñ´ò¿ªÒ¡Ò¡¹¦ÄÜ public void setShakeFlag(boolean shakeflag) { mService.get().setShakeFlag(shakeflag); } public boolean getShakeFlag() { return mService.get().getShakeFlag(); }
½ÓÏÂÀ´¾ÍÊÇÔÚIMediaPlaybackService.aidlÎļþÖÐÌí¼Ó¶ÔÓ¦µÄº¯Êý£» void setShakeFlag(boolean shakeflag); boolean getShakeFlag();
×îºó¾ÍÊÇÌí¼ÓÒ»¸öÎļþShakeDetector.javapackage com.android.music; import android.content.Context;import android.hardware.Sensor;import android.hardware.SensorEvent;import android.hardware.SensorEventListener;import android.hardware.SensorManager;import android.util.Log;public class ShakeDetector implements SensorEventListener {private static final String TAG = "ShakeDetector";private Context mContext;private long lastTime; private float last_x;private float last_y;private float last_z;private static final double SHAKE_SHRESHOLD = 3000d;//Õâ¸öÖµ¿É¸ù¾ÝsensorµÄÁéÃô¶ÈÀ´µ÷Õû private Sensor sensor;private SensorManager sensorManager;public onShakeListener shakeListener;public ShakeDetector(Context context) {mContext = context;sensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);} public boolean registerListener() {if (sensorManager != null) {sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);if (sensor != null) {this.sensorManager.registerListener(this, sensor,SensorManager.SENSOR_DELAY_GAME);return true;}}return false;}public void unRegisterListener() {System.out.println("ShakeDetector:unRegisterListener");if (sensorManager != null && sensor != null)sensorManager.unregisterListener(this , sensor);}public void setOnShakeListener(onShakeListener listener) {shakeListener = listener;}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {// TODO Auto-generated method stub}@Overridepublic void onSensorChanged(SensorEvent event) {// TODO Auto-generated method stublong curTime = java.lang.System.currentTimeMillis();if ((curTime - lastTime) > 50) {long diffTime = (curTime - lastTime);lastTime = curTime;float x = event.values[0];float y = event.values[1];float z = event.values[2]; float speed = Math.abs(x + y + z - last_x - last_y - last_z)/ diffTime * 10000;System.out.println("ShakeDetector:onSensorChanged speed ="+speed);if (speed > SHAKE_SHRESHOLD) {shakeListener.onShake();}last_x = x;last_y = y;last_z = z;}} public interface onShakeListener {public void onShake();}}
ºÃ£¬µ½´ËΪֹ£¬¾Í¿ÉÒÔʵÏÖÒ¡Ò¡Çи蹦ÄÜÁË£¬Èç¹ûÓÐÓõÃÉϵģ¬¿ÉÒÔÄÃÈ¥ÓÃһϣ¬±ðµÄƽ̨£¨Õ¹Ñ¶£¬MTK£Ò²¶¼¿ÉÒÔÀà似µÄʵÏִ˹¦ÄÜ£¬ÓÐÎÊÌâÇëÔÚºóÃæÁôÑÔ¡£