@Override
  protected void onDestroy() {
    LogManager.d(TAG, "onDestroy()");
    super.onDestroy();

    mFindBeacons.closeSearcher();
    loghelper.stop();
  }
  /** 停止查找beacons */
  public void onMonitoringStop(View view) {
    logToDisplay("onMonitoringStop(),stopMonitoringBeaconsInRegion");
    LogManager.d(TAG, "onMonitoringStop(),stopMonitoringBeaconsInRegion");
    mFindBeacons.closeSearcher();
    mStart_btn.setEnabled(true);
    mStop_btn.setEnabled(false);

    // 设置记录标志
    isRecorded = true;
  }
  /** 开始查找附近beacons */
  public void onMonitoringStart(View view) {
    logToDisplay("onMonitoringStart(),startMonitoringBeaconsInRegion");
    LogManager.d(TAG, "onMonitoringStart(),startMonitoringBeaconsInRegion");

    // 根据编辑框,设置前台扫描周期,default 1.1s
    onForegroundScanPeriod(null);

    // 根据编辑框,设置rssi采样周期,即,计算该时间段内的平均RSSI(首末各去掉10%),缺省是20秒(20000毫秒)
    onSamplePeriod(null);

    mFindBeacons.openSearcher();
    mStart_btn.setEnabled(false);
    mStop_btn.setEnabled(true);

    // 记录开始采样时间
    startSample = System.currentTimeMillis();

    // 设置记录标志
    isRecorded = false;
  }
 /** 设置rssi采样周期,即,计算该时间段内的平均RSSI(首末各去掉10%),缺省是20秒(20000毫秒) */
 public void onSamplePeriod(View view) {
   String period_str = SamplePeriod_edit.getText().toString();
   SamplePeroid = (int) (Double.parseDouble(period_str) * 1000.0D);
   FindBeacons.setSampleExpirationMilliseconds(SamplePeroid);
 }
 /** 设置前台扫描周期 */
 public void onForegroundScanPeriod(View view) {
   String period_str = ScanPeriod_edit.getText().toString();
   long period = (long) (Double.parseDouble(period_str) * 1000.0D);
   mFindBeacons.setForegroundScanPeriod(period);
 }
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    // 建议使用org.altbeacon.beacon.logging.LogManager.javaLogManager输出日志,altbeacon就是使用这种机制,便于发布版本时,减少输出日志信息。
    // 输出所有ERROR(Log.e()), WARN(Log.w()), INFO(Log.i()), DEBUG(Log.d()), VERBOSE(Log.v())
    // 对应日志级别由高到低
    LogManager.setLogger(Loggers.verboseLogger());

    // 全部不输出,在release版本中设置
    // LogManager.setLogger(Loggers.empty());

    // 输出ERROR(Log.e()), WARN(Log.w()),缺省状态,仅输出错误和警告信息,即输出警告级别以上的日志
    // LogManager.setLogger(Loggers.warningLogger());

    // 试验日志输出
    //        LogManager.e(TAG,"Error");
    //        LogManager.w(TAG,"Warn");
    //        LogManager.i(TAG,"info");
    //        LogManager.d(TAG,"debug");
    //        LogManager.v(TAG,"verbose");

    LogManager.d(TAG, "onCreate");
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // 日志文件
    start_logfile = (Button) findViewById(R.id.start_log);
    end_logfile = (Button) findViewById(R.id.end_log);

    // 设置SD卡中的日志文件,sd卡根目录/rssiRecord/mydistance.log
    loghelper = LogcatHelper.getInstance(this, "rssiRecord", "mydistance.log");
    // 设置SD卡中的日志文件,sd卡根目录/mydistance.log
    // loghelper = LogcatHelper.getInstance(this,"","mydistance.log");

    // 打印D级以上(包括D,I,W,E,F)的TAG,其它tag不打印
    // Logformat = TAG + ":D *:S";

    // 打印D级以上的TAG,和LogcatHelper全部,其它tag不打印
    // Logformat = TAG + ":D LogcatHelper:V *:S";

    // 打印D以上的TAG和RunningAverageRssiFilter,其他tag不打印(*:S)
    // Logformat = TAG + ":D RunningAverageRssiFilter:D *:S";

    // 打印D以上的TAG和RssiDbManager,其他tag不打印(*:S)
    Logformat = TAG + ":D RssiDbManager:D *:S";

    // 打印D以上的FindBeacons,其他tag不打印(*:S)
    // Logformat = "FindBeacons:D *:S";

    // Logformat = "RangedBeacon:V *:S";

    // 打印所有日志, priority=V | D | I | W | E ,级别由低到高
    // Logformat = "";

    // 日志文件
    loghelper.start(Logformat);

    // "开始记录日志"按钮失效,此时已经开始记录日志
    start_logfile.setEnabled(false);

    // 开始/停止监控(查找)beacons
    mStart_btn = (Button) findViewById(R.id.Mstart);
    mStop_btn = (Button) findViewById(R.id.Mstop);
    mStop_btn.setEnabled(false);

    // 获取FindBeacons唯一实例
    mFindBeacons = FindBeacons.getInstance(this);

    // 设置默认前台扫描周期,default 1.1s
    ScanPeriod_edit = (EditText) findViewById(R.id.ScanPeriod_edit);
    ScanPeriod_edit.setText("1.1");
    onForegroundScanPeriod(null);

    // rssi采样周期,即,计算该时间段内的平均RSSI(首末各去掉10%),缺省是20秒(20000毫秒)
    SamplePeriod_edit = (EditText) findViewById(R.id.SamplePeriod_edit);
    SamplePeriod_edit.setText("60"); // 在此设定停留时间,默认为1分钟。
    onSamplePeriod(null);

    // 定位参考点名称
    reference_point_edit = (EditText) findViewById(R.id.RPname);
    reference_point_edit.setText(reference_pointPerf + reference_pointNum);

    // 数据库管理
    mRssiDbManager = new RssiDbManager(trainingActivity.this);

    // 设置获取附近所有beacons的监听对象,在每个扫描周期结束,通过该接口获取找到的所有beacons
    mFindBeacons.setBeaconsListener(mBeaconsListener);

    // 查看手机蓝牙是否可用,若当前状态为不可用,则默认调用意图请求打开系统蓝牙
    mFindBeacons.checkBLEEnable();

    logToDisplay("Mstart,Mstop分别代表查找beacon的开始和结束");
  }