編輯:安卓省電與加速
一、原理介紹:
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; }
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(); }
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
智能手機的普及豐富了我們的碎片時間,但是豐富的軟件應用讓手機的電量消耗迅速。怎樣能讓自己的智能手機電量更持久呢?當然是精挑細選最省電的軟件啦!好的手機應用軟件不但功能強大
Android手機省電攻略 耗電的根源 想要知道手機為什麼費電,就必須找到根源,Android手機給我們提供了電老虎費電的證據,我們在手機設置-關於手機-電池
根據國外媒體報道,谷歌宣布目前最新版的Android即“果凍豆”(Jelly Bean)所
Android手機省電攻略 耗電的根源 想要知道手機為什麼費電,就必須