代码很简单,网上也有好多


去弄了一个到手机里,一运行就一直震动,弄了好久不明所以。


后来去看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


希望能帮到和我一样问题的。