Newer
Older
dxcgt / app / src / main / java / com / smartdot / cgt / activity / FrmHome.java
wangxitong on 6 Apr 2021 5 KB first commit
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
		
	}
}