权限(震动权限):
<uses-permission android:name="android.permission.VIBRATE"></uses-permission>
代码:
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Vibrator;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements SensorEventListener {
//得到传感器的管理者
private SensorManager manager;
private TextView tv;
Sensor acceSensor;
//得到震动管理者
private Vibrator vibrator;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.tv= (TextView) this.findViewById(R.id.tv);
//初始化
manager= (SensorManager) this.getSystemService(Context.SENSOR_SERVICE);
//得到震动管理器
vibrator= (Vibrator) this.getSystemService(Context.VIBRATOR_SERVICE);
// //得到所有传感器信息
// List<Sensor> sensorList = manager.getSensorList(Sensor.TYPE_ALL);
// //manager.getDefaultSensor(Sensor.TYPE_GRAVITY);
//
// for (Sensor s:sensorList)
// {
// tv.append(s.getName()+"\n");
// }
//得到相应的传感器
acceSensor = manager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
//注册传感器
//参数为监听者,传感器,监测频率
if(acceSensor != null){
manager.registerListener(this,acceSensor,SensorManager.SENSOR_DELAY_NORMAL);
}
}
private long currentMills;
/**
* 传感器检测数据之后回调的方未能
* @param event
*/
@Override
public void onSensorChanged(SensorEvent event) {
switch (event.sensor.getType())
{
case Sensor.TYPE_ACCELEROMETER:
//xyz带表三个方向偏移的距离
float x = event.values[0];
float y = event.values[1];
float z = event.values[2];
//System.out.println(x + " -- " + y + " -- " + z);
tv.setText(x+" "+y+" "+z);
if((Math.abs(x)>25||Math.abs(y)>25||Math.abs(z)>25)&&(System.currentTimeMillis()-currentMills>2000)){
currentMills=System.currentTimeMillis();
// System.out.println("------检测到手机摇晃");
//震动时间
vibrator.vibrate(1000);
}
break;
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// System.out.println("---aaa----"+sensor.getName());
}
@Override
protected void onPause() {
super.onPause();
//解除特定的传感器注册
// manager.unregisterListener(this,acceSensor);
//解除所有传感器注册
manager.unregisterListener(this);
}
}