Android Open Source - Music-Share-Android Shake Detector






From Project

Back to project page Music-Share-Android.

License

The source code is released under:

GNU General Public License

If you think the Android project Music-Share-Android listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.paperairplane.music.share.utils;
/*  w  w  w  .  j  av  a 2s  .c  o  m*/
import java.util.ArrayList;

import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;

/**
 * ????????
 * 
 * @author ????
 * @see <a href="http://blog.csdn.net/zhengzhiren">Blog</a>
 */
// P.S.???????????????????????==
//?????????
public class ShakeDetector implements SensorEventListener {
  /**
   * ????????????
   */
  private static ShakeDetector INSTANCE;
  /**
   * ???????
   */
  private static final int UPDATE_INTERVAL = 100;
  /**
   * ????????
   */
  private long mLastUpdateTime;
  /**
   * ???????????x??y??z????????????????????????
   */
  private float mLastX, mLastY, mLastZ;
  private SensorManager mSensorManager;
  private ArrayList<OnShakeListener> mListeners;
  /**
   * ????????????????????????????
   */
  public int mShakeThreshold = 5000;
  // ?????
  private int mSensorChangeCount = 0;
  public static boolean sCanDetact;

  public static ShakeDetector getInstance(Context context){
    if(INSTANCE == null){
      INSTANCE = new ShakeDetector(context);
    }
    return INSTANCE;
  }
  
  private ShakeDetector(Context context) {
    mSensorManager = (SensorManager) context
        .getSystemService(Context.SENSOR_SERVICE);
    mListeners = new ArrayList<OnShakeListener>();
  }

  /**
   * ???????????????
   */
  public interface OnShakeListener {
    /**
     * ?????????
     */
    void onShake();
  }

  /**
   * ??OnShakeListener?????????
   * 
   * @param listener
   */
  public void registerOnShakeListener(OnShakeListener listener) {
    if (mListeners.contains(listener))
      return;
    mListeners.add(listener);
  }

  /**
   * ????????OnShakeListener
   * 
   * @param listener
   */
  public void unregisterOnShakeListener(OnShakeListener listener) {
    mListeners.remove(listener);
  }

  /**
   * ????????
   */
  public void start() {
    if (mSensorManager == null) {
      throw new UnsupportedOperationException();
    }
    Sensor sensor = mSensorManager
        .getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    if (sensor == null) {
      throw new UnsupportedOperationException();
    }
    mSensorManager.registerListener(this, sensor,
        SensorManager.SENSOR_DELAY_GAME);
  }

  /**
   * ????????
   */
  public void stop() {
    if (mSensorManager != null)
      mSensorManager.unregisterListener(this);
  }

  @Override
  public void onAccuracyChanged(Sensor sensor, int accuracy) {
  }

  @Override
  public void onSensorChanged(SensorEvent event) {
    long currentTime = System.currentTimeMillis();
    long diffTime = currentTime - mLastUpdateTime;
    if (diffTime < UPDATE_INTERVAL)
      return;
    mLastUpdateTime = currentTime;
    float x = event.values[0];
    float y = event.values[1];
    float z = event.values[2];
    float deltaX = x - mLastX;
    float deltaY = y - mLastY;
    float deltaZ = z - mLastZ;
    mLastX = x;
    mLastY = y;
    mLastZ = z;
    double delta = Math.sqrt(deltaX * deltaX + deltaY * deltaY + deltaZ
        * deltaZ)
        / diffTime * 10000;
    if (delta > mShakeThreshold) { // ???????????????????????
      mSensorChangeCount++;
    }
    if (mSensorChangeCount == 3) {
      this.notifyListeners();
      mSensorChangeCount = 0;
    }
  }

  /**
   * ????????????????listener
   */
  private void notifyListeners() {
    for (OnShakeListener listener : mListeners) {
      listener.onShake();
    }
  }
}




Java Source Code List

android.net.http.SslError.java
com.paperairplane.music.share.AtSuggestionActivity.java
com.paperairplane.music.share.Consts.java
com.paperairplane.music.share.FeedbackMessage.java
com.paperairplane.music.share.Main.java
com.paperairplane.music.share.MusicData.java
com.paperairplane.music.share.MusicListAdapter.java
com.paperairplane.music.share.QueryAndShareMusicInfo.java
com.paperairplane.music.share.Receiver.java
com.paperairplane.music.share.SnsHelper.java
com.paperairplane.music.share.cache.ImageLoader.java
com.paperairplane.music.share.cache.MemoryCache.java
com.paperairplane.music.share.dialogs.AboutDialogFragment.java
com.paperairplane.music.share.dialogs.AbsDialogFragment.java
com.paperairplane.music.share.dialogs.AuthManagerDialogFragment.java
com.paperairplane.music.share.dialogs.BackgroundChooserDialogFragment.java
com.paperairplane.music.share.dialogs.ChangeColorDialogFragment.java
com.paperairplane.music.share.dialogs.EmptyDialogFragment.java
com.paperairplane.music.share.dialogs.FeedbackDialogFragment.java
com.paperairplane.music.share.dialogs.SearchDialogFragment.java
com.paperairplane.music.share.dialogs.SendWeiboDialogFragment.java
com.paperairplane.music.share.dialogs.ThankDialogFragment.java
com.paperairplane.music.share.utils.CrashHandler.java
com.paperairplane.music.share.utils.HanziToPinyin.java
com.paperairplane.music.share.utils.HttpQuestHandler.java
com.paperairplane.music.share.utils.IntentResolver.java
com.paperairplane.music.share.utils.MyLogger.java
com.paperairplane.music.share.utils.ShakeDetector.java
com.paperairplane.music.share.utils.Utilities.java
com.paperairplane.music.share.utils.lastfm.Album.java
com.paperairplane.music.share.utils.lastfm.Artist.java
com.paperairplane.music.share.utils.lastfm.Caller.java
com.paperairplane.music.share.utils.lastfm.DomElement.java
com.paperairplane.music.share.utils.lastfm.ImageHolder.java
com.paperairplane.music.share.utils.lastfm.ImageSize.java
com.paperairplane.music.share.utils.lastfm.Image.java
com.paperairplane.music.share.utils.lastfm.ItemFactoryBuilder.java
com.paperairplane.music.share.utils.lastfm.ItemFactory.java
com.paperairplane.music.share.utils.lastfm.MapUtilities.java
com.paperairplane.music.share.utils.lastfm.MusicEntry.java
com.paperairplane.music.share.utils.lastfm.PaginatedResult.java
com.paperairplane.music.share.utils.lastfm.ResponseBuilder.java
com.paperairplane.music.share.utils.lastfm.Result.java
com.paperairplane.music.share.utils.lastfm.StringUtilities.java
com.paperairplane.music.share.utils.lastfm.Track.java
com.weibo.sdk.android.Oauth2AccessToken.java
com.weibo.sdk.android.WeiboAuthListener.java
com.weibo.sdk.android.WeiboDialogError.java
com.weibo.sdk.android.WeiboDialog.java
com.weibo.sdk.android.WeiboException.java
com.weibo.sdk.android.WeiboParameters.java
com.weibo.sdk.android.Weibo.java
com.weibo.sdk.android.api.AccountAPI.java
com.weibo.sdk.android.api.ActivityInvokeAPI.java
com.weibo.sdk.android.api.CommentsAPI.java
com.weibo.sdk.android.api.CommonAPI.java
com.weibo.sdk.android.api.FavoritesAPI.java
com.weibo.sdk.android.api.FriendshipsAPI.java
com.weibo.sdk.android.api.PlaceAPI.java
com.weibo.sdk.android.api.RegisterAPI.java
com.weibo.sdk.android.api.SearchAPI.java
com.weibo.sdk.android.api.ShortUrlAPI.java
com.weibo.sdk.android.api.StatusesAPI.java
com.weibo.sdk.android.api.SuggestionsAPI.java
com.weibo.sdk.android.api.TagsAPI.java
com.weibo.sdk.android.api.TrendsAPI.java
com.weibo.sdk.android.api.UsersAPI.java
com.weibo.sdk.android.api.WeiboAPI.java
com.weibo.sdk.android.net.AsyncWeiboRunner.java
com.weibo.sdk.android.net.HttpManager.java
com.weibo.sdk.android.net.NetStateManager.java
com.weibo.sdk.android.net.RequestListener.java
com.weibo.sdk.android.sso.SsoHandler.java
com.weibo.sdk.android.util.BitmapHelper.java
com.weibo.sdk.android.util.Utility.java