package com.smartdot.cgt.activity; import android.annotation.SuppressLint; import android.app.Service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.os.IBinder; import android.os.Message; import android.os.PowerManager; import android.os.PowerManager.WakeLock; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView; import com.smartdot.cgt.R; public class FrmHome extends BaseActivity { private static final String TAG = "AccleratePersist"; private static final int DELAY = SensorManager.SENSOR_DELAY_NORMAL; private static boolean STOP = true;// 开始暂停按钮 private SensorManager mSensorManager; private WakeLock mWakeLock; private TextView accView;// 显示加速度值 private StringBuilder builder = new StringBuilder(); private long lastTimestamp = 0; private PersistService mySerivece; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // accView = (TextView) this.findViewById(R.id.accValue); // final Button stopButton = (Button) this.findViewById(R.id.stopButton);// 停止测量按钮 // final Button clearButton = (Button) this.findViewById(R.id.clear); // 清除数据 View.OnClickListener onClickListener = new View.OnClickListener() { @Override public void onClick(View view) { // if (view == stopButton) { STOP = !STOP; setMeasure(); // } else if (view == clearButton) { builder = new StringBuilder(); accView.setText(""); // } } @SuppressLint("Wakelock") private void setMeasure() { if (STOP) {// 停止键按下后,取消监听,是否电源 // stopButton.setText("继续"); mSensorManager.unregisterListener(mySerivece); mWakeLock.release(); } else { // stopButton.setText("停止"); mWakeLock.acquire();// 屏幕熄后,CPU继续运行 mSensorManager .registerListener( mySerivece, mSensorManager .getDefaultSensor(Sensor.TYPE_ACCELEROMETER), DELAY); } } }; // clearButton.setOnClickListener(onClickListener); // stopButton.setOnClickListener(onClickListener); mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); mySerivece = new PersistService(); PowerManager manager = (PowerManager) getSystemService(Context.POWER_SERVICE); mWakeLock = manager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);// CPU保存运行 IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);// 屏幕熄掉后依然运行 filter.addAction(Intent.ACTION_SCREEN_OFF); registerReceiver(mySerivece.mReceiver, filter); } class PersistService extends Service implements SensorEventListener { private float[] accValue = new float[3]; public BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (!STOP && !intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { return; } if (mSensorManager != null) {//取消监听后重写监听,以保持后台运行 mSensorManager.unregisterListener(PersistService.this); mSensorManager .registerListener( PersistService.this, mSensorManager .getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL); } } }; public void onAccuracyChanged(Sensor sensor, int accuracy) { Log.i(TAG, "PersistService.onAccuracyChanged()."); } public void onSensorChanged(SensorEvent sensorEvent) { if (sensorEvent.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { Log.i(TAG, "PersistService.TYPE_ACCELEROMETER."); accValue = sensorEvent.values; for (int i = 0; i < 3; i++) { builder.append((int) accValue[i]); builder.append(","); } builder.append((sensorEvent.timestamp - lastTimestamp) / 1000000);// 采样时间差 builder.append("\n"); accView.setText(builder.toString()); lastTimestamp = sensorEvent.timestamp; } } @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } } @Override protected void setLayout() { // TODO Auto-generated method stub } @Override protected void addEventListener() { // TODO Auto-generated method stub } @Override protected void handleMessage(Message msg) { // TODO Auto-generated method stub } @Override protected void onCancelProgress(DialogInterface arg0) { // TODO Auto-generated method stub } }