代码很简单,网上也有好多
去弄了一个到手机里,一运行就一直震动,弄了好久不明所以。
后来去看SDK文档才发现是有一个最大值的问题,我的手机的触发值跟其他手机的不一样
上代码:
import android.app.Activity; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.os.Vibrator; import android.widget.TextView; public class MainActivity extends Activity implements SensorEventListener { // Sensor管理器 private SensorManager mSensorManager = null; // 震动 private Vibrator mVibrator = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); mVibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE); } public void onAccuracyChanged(Sensor arg0, int arg1) { } public void onSensorChanged(SensorEvent arg0) { int sensorType = arg0.sensor.getType(); float[] values = arg0.values; // 我的手机传感器的最大值是19,设置为14时会一直震动 // 可能是每一个手机设置的值是不一样的 // 用这个方法拿到最大的值arg0.sensor.getMaximumRange() TextView textView2 = (TextView) findViewById(R.id.textView2); textView2.setText("最大值" + arg0.sensor.getMaximumRange()); if (sensorType == Sensor.TYPE_ACCELEROMETER) { if (Math.abs(values[0]) > 19 || Math.abs(values[1]) > 19 || Math.abs(values[2]) > 19) { mVibrator.vibrate(100); TextView tv1 = (TextView) findViewById(R.id.textView1); tv1.setText("哈哈,动起来..."); } } } @Override protected void onResume() { super.onResume(); mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL); } @Override protected void onStop() { mSensorManager.unregisterListener(this); super.onStop(); } @Override protected void onPause() { mSensorManager.unregisterListener(this); super.onPause(); } }
activity_main.xml 中就两个TextView
希望能帮到和我一样问题的。