Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> 安卓省電與加速 >> Android加速度傳感器的使用:搖一搖功能的實現

Android加速度傳感器的使用:搖一搖功能的實現

編輯:安卓省電與加速

一、原理介紹:

Android手機中搖一搖的功能已經很常見了,最近接觸到了這個功能,原理很簡單:使用加速度傳感器,在晃動手機時,監聽加速度在各個方向的變化,當加速度值超過設定的靈敏度時,則觸發搖一搖功能。


二、使用到的類:

SensorManager

SensorEventListener


三、功能實現:

1、搖一搖功能:我將搖一搖功能封裝成了一個類ShakeUtils,在使用時按照注釋中的說明使用即可,ShakeUtils.java如下(差的包請CTRL+SHIFT+O導入):

/**
 * 搖一搖工具類
 * 使用說明:
 * private ShakeUtils mShakeUtils = null;
 * 1、在需要使用搖一搖功能的Activity實例化該工具類並設置搖一搖監聽:
 * mShakeUtils = new ShakeUtils( this );
 * mShakeUtils.setOnShakeListener(new OnShakeListener{
 * 		public void onShake(){
 * 			// 此處為搖一搖觸發後的操作
 * 		}
 * });
 * 
 * 2、分別在Activity的onResume和onPause方法中調用該工具類的onResume和onPause方法:
 * mShakeUtils.onResume();
 * mShakeUtils.onPause();
 * */
public class ShakeUtils implements SensorEventListener {
	public ShakeUtils( Context context ){
		mSensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);  
	}
	
	public void setOnShakeListener( OnShakeListener onShakeListener ){
		mOnShakeListener = onShakeListener;
	}
	
	public void onResume(){
		mSensorManager.registerListener(this,  
				mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),  
                SensorManager.SENSOR_DELAY_NORMAL);
	}
	
	public void onPause(){
		mSensorManager.unregisterListener(this); 
	}
	
	@Override
	public void onAccuracyChanged(Sensor sensor, int accuracy) {
		
	}

	@Override
	public void onSensorChanged(SensorEvent event) {
		int sensorType = event.sensor.getType();  
        //values[0]:X軸,values[1]:Y軸,values[2]:Z軸    
        float[] values = event.values;  
        if (sensorType == Sensor.TYPE_ACCELEROMETER){  
            //這裡可以調節搖一搖的靈敏度
            if ((Math.abs(values[0]) > SENSOR_VALUE || Math.abs(values[1]) > SENSOR_VALUE || Math.abs(values[2]) > SENSOR_VALUE)){
            	System.out.println("sensor value == " + " " + values[ 0 ] + " " + values[ 1 ] + " " +  values[ 2 ] );
                if( null != mOnShakeListener ){
                	mOnShakeListener.onShake( );
                }
            }  
        }  
	}
	
	public interface OnShakeListener{
		public void onShake();
	}
	
	private SensorManager mSensorManager = null;
	private OnShakeListener mOnShakeListener = null;
	private static final int SENSOR_VALUE = 14;
}


2、BaseActivity:為了方便程序擴展,為所有的Activity寫了一個基類:

public abstract class BaseActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		init();
	}
	
	private void init(){
		setContentView( );
		findViews( );
		getData( );
		showContent( );
	}
	
	public abstract void setContentView();
	public abstract void findViews();
	public abstract void getData();
	public abstract void showContent();
}

3、ShakeBeautyActivity:ShakeUtils的具體使用:

public class ShakeBeautyActivity extends BaseActivity {
	@Override
	public void setContentView() {
		setContentView( R.layout.activity_shake_beauty_layout );
	}

	@Override
	public void findViews() {
		mShakeImageView = ( ImageView )findViewById( R.id.shakeImgId );
		initShakeUtils( );
	}

	@Override
	public void getData() {
		
	}

	@Override
	public void showContent() {
		
	}
	
	@Override
	protected void onResume() {
		super.onResume();
		mShakeUtils.onResume( );
	}
	
	@Override
	protected void onPause() {
		super.onPause();
		mShakeUtils.onPause( );
	}
	
	private void initShakeUtils(){
		mShakeUtils = new ShakeUtils( this );
		mShakeUtils.setOnShakeListener( new OnShakeListener( ) {
			@Override
			public void onShake() {
				setShakeImage( );
			}
		});
	}
	
	private void setShakeImage( ){
		Random random = new Random( );
		mShakeImageView.setBackgroundResource( mBeautys[ ( Math.abs(random.nextInt( ) ) )%mBeautys.length ] );
	}
	
	private ImageView mShakeImageView = null;
	private ShakeUtils mShakeUtils = null;
	private static final int[] mBeautys = new int[]{
		 R.drawable.beauty_01
		,R.drawable.beauty_02
		,R.drawable.beauty_03
		,R.drawable.beauty_04
		,R.drawable.beauty_05
		,R.drawable.beauty_06
		,R.drawable.beauty_07
		,R.drawable.beauty_08
		,R.drawable.beauty_09
	};
}


四、demo下載:

搖一搖Demo

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved