📅  最后修改于: 2023-12-03 15:08:02.384000             🧑  作者: Mango
在移动设备上,用户可以通过颤动手势触发某些操作。开发者可以利用这一特性来实现一些有趣的功能,比如在用户颤动设备时通过显示对话框来提示用户。
以下是一个实现该功能的例子:
public class MainActivity extends AppCompatActivity implements SensorEventListener {
private SensorManager sensorManager;
private boolean isShakeDetected;
private final float shakeThreshold = 1.5f;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取传感器管理器
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
isShakeDetected = false;
}
@Override
protected void onResume() {
super.onResume();
// 注册加速度传感器
sensorManager.registerListener(
this,
sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_NORMAL
);
}
@Override
protected void onPause() {
super.onPause();
// 取消加速度传感器注册
sensorManager.unregisterListener(this);
}
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
// 获取加速度传感器数据
float x = event.values[0];
float y = event.values[1];
float z = event.values[2];
// 计算加速度值
double acceleration = Math.sqrt(x * x + y * y + z * z) - SensorManager.GRAVITY_EARTH;
// 如果加速度值大于设定的阈值,则判定为用户颤动设备
if (acceleration > shakeThreshold && !isShakeDetected) {
isShakeDetected = true;
// 显示对话框
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("您颤动了设备!");
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
isShakeDetected = false;
}
});
AlertDialog dialog = builder.create();
dialog.show();
}
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// Do nothing.
}
}
onSensorChanged
方法中计算加速度值,判定用户是否颤动设备。isShakeDetected
的值。