摇一摇程序主要依靠的是系统的“加速度传感器”。
加速度传感器用于感知手机的加速度,其返回值是一个返回值为3的数组,数组中的3(values[0],values[2],values[2],)个元素分别代表手机的加速度在x,y,z轴上的分量。
开发步骤:
1、首先要获得SensorManager对象
SensorManager mySensorManager = (SensorManager )getSystemService(SENSOR_SERVICE);
2、获取Sensor或者Vibrator对象
3、实现SensorEventListener接口
4、注册和注销监听器
实例代码:
package com.cutsreen.cn;
import com.cutscreen.contant.Contant;
import com.cutscreen.service.FloatingService;
import com.cutscreen.service.ShakeService;
import com.yangyu.mycustomtab02.R;
import android.app.Service;
import android.content.Intent;
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.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
import android.widget.Toast;
public class FragmentPage1 extends Fragment implements SensorEventListener{
private SensorManager mySensorManager = null;
private Vibrator vibratorShake = null;
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
mySensorManager = (SensorManager) getActivity().getSystemService(getActivity().SENSOR_SERVICE);
vibratorShake = (Vibrator)getActivity().getSystemService(Service.VIBRATOR_SERVICE);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_1, container,false);
ralativelayout02 = (RelativeLayout)root.findViewById(R.id.yaoyiyao);
ralativelayout02.setOnClickListener(new ralativelayoutShakeClickListener());
ralativelayout01 = (RelativeLayout)root.findViewById(R.id.floatwindows);
ralativelayout01.setOnClickListener(new ralativelayoutFloatClickListener());
return root;
}
@Override
public void onResume() {
// TODO Auto-generated method stub
super.onResume();
mySensorManager.registerListener(this,
mySensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
public void onPause() {
// TODO Auto-generated method stub
super.onPause();
mySensorManager.unregisterListener(this);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
int sensorType = event.sensor.getType();
float[]values = event.values;
if(sensorType == Sensor.TYPE_ACCELEROMETER){
if(Math.abs(values[0])>17||Math.abs(values[2])>17){
Log.d("sensor x","=======values[0]="+values[0]);
Log.d("sensor y","=======values[1]="+values[1]);
Log.d("sensor z","=======values[2]="+values[2]);
Toast.makeText(getActivity().getApplicationContext(), "摇一摇截屏",Toast.LENGTH_SHORT).show();
//在这里添加截屏代码
vibratorShake.vibrate(500);
}
}
}
}