Android开发---摇一摇功能实现【源码】

以前做的一个小应用里面有摇一摇功能,有必要写下来做个笔记。

摇一摇功能主要用到加速度传感器Sensor.TYPE_ACCELEROMETER

摇一摇功能主要是监听手机加速度变化,当超过设定的某一值时,即触发事件。

一、简单的一个示例源码

下给出一段简单的实现代码:

功能:原先textview1显示为“初始文本”, 当摇晃之后,textview1变为”摇一摇成功!!!“并伴随震动(点击按钮可回到”初始文本“)。

public class SensorTestActivity extends Activity implements SensorEventListener
{
 TextView tv = null;
 Button button = null;
 SensorManager sensorManager = null;
 Vibrator vibrator = null;

 @Override
 public void onCreate(Bundle savedInstanceState)
 {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  button = (Button) findViewById(R.id.button1);
  tv = (TextView) findViewById(R.id.textview1);
  button.setOnClickListener(new View.OnClickListener()
  {

   @Override
   public void onClick(View v)
   {
    tv.setText("初始文本");
   }
  });

  sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
  vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE);

 }

 @Override
 protected void onPause()
 {
  super.onPause();
  sensorManager.unregisterListener(this);
 }

 @Override
 protected void onResume()
 {
  super.onResume();
  sensorManager.registerListener(this,
    sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
    SensorManager.SENSOR_DELAY_NORMAL);
 }

 @Override
 public void onAccuracyChanged(Sensor sensor, int accuracy)
 {
  //当传感器精度改变时回调该方法,Do nothing.
 }

 @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]) > 17 || Math.abs(values[1]) > 17 || Math
     .abs(values[2]) > 17))
   {
    Log.d("sensor x ", "============ values[0] = " + values[0]);
    Log.d("sensor y ", "============ values[1] = " + values[1]);
    Log.d("sensor z ", "============ values[2] = " + values[2]);
    tv.setText("摇一摇成功!!!");
    //摇动手机后,再伴随震动提示~~
    vibrator.vibrate(500);
   }

  }
 }

}

相关推荐