1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
| public class ShakeService extends Service { public static final String TAG = "ShakeService"; private SensorManager mSensorManager; public boolean flag=false; private ShakeBinder shakebinder= new ShakeBinder(); private String htmlbody="";
@Override public void onCreate() { super.onCreate(); mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); Log.i(TAG,"Shake Service Create"); }
@Override public void onDestroy() { flag=false; super.onDestroy(); mSensorManager.unregisterListener(mShakeListener); }
@Override public void onStart(Intent intent, int startId) { super.onStart(intent, startId); Log.i(TAG,"Shake Service Start"); }
@Override public int onStartCommand(Intent intent, int flags, int startId) { mSensorManager.registerListener(mShakeListener, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), 50 * 1000); htmlbody=intent.getStringExtra("htmlbody");
return super.onStartCommand(intent, flags, startId); }
private final SensorEventListener mShakeListener = new SensorEventListener() { private static final float SENSITIVITY = 10; private static final int BUFFER = 5; private float[] gravity = new float[3]; private float average = 0; private int fill = 0;
@Override public void onAccuracyChanged(Sensor sensor, int acc) { }
public void onSensorChanged(SensorEvent event) { final float alpha = 0.8F;
for (int i = 0; i < 3; i++) { gravity[i] = alpha * gravity[i] + (1 - alpha) * event.values[i]; }
float x = event.values[0] - gravity[0]; float y = event.values[1] - gravity[1]; float z = event.values[2] - gravity[2];
if (fill <= BUFFER) { average += Math.abs(x) + Math.abs(y) + Math.abs(z); fill++; } else { Log.i(TAG, "average:"+average); Log.i(TAG, "average / BUFFER:"+(average / BUFFER)); if (average / BUFFER >= SENSITIVITY) { handleShakeAction(); } average = 0; fill = 0; } } };
protected void handleShakeAction() { flag=true; Toast.makeText(getApplicationContext(), "摇一摇成功", Toast.LENGTH_SHORT).show(); Intent intent= new Intent(); intent.putExtra("htmlbody",htmlbody); intent.addFlags(FLAG_ACTIVITY_NEW_TASK); intent.setClassName(this,"thinkwee.buptroom.ShakeTestActivity"); startActivity(intent); }
@Override public IBinder onBind(Intent intent) { return shakebinder; } class ShakeBinder extends Binder{
} }
|