Android 手机摇一摇功能的实现

package myapplication.com.myapp.activity;
public class Home_Activity extends AppCompatActivity{
//传感器
private SensorManager sensorManager;
//振动器
private Vibrator vibrator; private TextView tv;
private static final int SENSOR_SHAKE = ;
/// @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home); initView(); } public void initView(){
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE); } /**
* 重力感应监听
*/
private SensorEventListener sensorEventListener = new SensorEventListener() { @Override
public void onSensorChanged(SensorEvent event) {
// 传感器信息改变时执行该方法
float[] values = event.values;
//设备坐标系是固定于设备的,与设备的方向(在世界坐标系中的朝向)无关
float x = values[]; // x轴方向的重力加速度,向右为正
float y = values[]; // y轴方向的重力加速度,向前为正
float z = values[]; // z轴方向的重力加速度,向上为正
Log.i("sensor", "x轴方向的重力加速度" + x + ";y轴方向的重力加速度" + y + ";z轴方向的重力加速度" + z);
// 一般在这三个方向的重力加速度达到40就达到了摇晃手机的状态。
int medumValue = ;// 三星 i9250怎么晃都不会超过20,没办法,只设置19了
if (Math.abs(x) > medumValue || Math.abs(y) > medumValue || Math.abs(z) > medumValue) {
//设置震动时长
vibrator.vibrate();
Message msg = new Message();
msg.what = SENSOR_SHAKE;
handler.sendMessage(msg);
}
}
//当传感器精度的改变时 进行的操作
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) { }
}; /**
* 动作执行
*/
Handler handler = new Handler() { @Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case SENSOR_SHAKE: Log.i("sensor", "检测到摇晃,执行操作!"); Intent intents=new Intent(Home_Activity.this,Fankui_Activity.class);
intents.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intents);
break;
}
} }; @Override
protected void onResume() {
super.onResume();
if (sensorManager != null) {// 注册监听器
// 第一个参数是Listener,第二个参数是所得传感器类型,第三个参数值获取传感器信息的频率
sensorManager.registerListener(sensorEventListener, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
}
} //记得在不用的时候关掉传感器,因为手机黑屏是不会自动关掉传感器的,当然如果你觉得电量一直都很足,那算我多嘴咯。
@Override
protected void onStop() {
super.onStop();
if (sensorManager != null) {// 取消监听器
sensorManager.unregisterListener(sensorEventListener);
}
} }
上一篇:POJ 3252 (数位DP)


下一篇:构造函数,super()