java计步器算法_基于地图的计步器

/*

*  Pedometer - Android App

*  Copyright (C) 2009 Levente Bagi

*

*  This program is free software: you can redistribute it and/or modify

*  it under the terms of the GNU General Public License as published by

*  the Free Software Foundation, either version 3 of the License, or

*  (at your option) any later version.

*

*  This program is distributed in the hope that it will be useful,

*  but WITHOUT ANY WARRANTY; without even the implied warranty of

*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

*  GNU General Public License for more details.

*

*  You should have received a copy of the GNU General Public License

*  along with this program.  If not, see .

*/

package name.bagi.levente.pedometer;

import com.google.tts.TTS;

/**

* Calculates and displays pace (steps / minute), handles input of desired pace,

* notifies user if he/she has to go faster or slower.

*

* Uses {@link PaceNotifier}, calculates speed as product of pace and step length.

*

* @author Levente Bagi

*/

public class SpeedNotifier implements PaceNotifier.Listener, SpeakingTimer.Listener {

public interface Listener {

public void valueChanged(float value);

public void passValue();

}

private Listener mListener;

int mCounter = 0;

float mSpeed = 0;

boolean mIsMetric;

float mStepLength;

PedometerSettings mSettings;

TTS mTts;

/** Desired speed, adjusted by the user */

float mDesiredSpeed;

/** Should we speak? */

boolean mShouldTellFasterslower;

boolean mShouldTellSpeed;

/** When did the TTS speak last time */

private long mSpokenAt = 0;

public SpeedNotifier(Listener listener, PedometerSettings settings, TTS tts) {

mListener = listener;

mTts = tts;

mSettings = settings;

mDesiredSpeed = mSettings.getDesiredSpeed();

reloadSettings();

}

public void setSpeed(float speed) {

mSpeed = speed;

notifyListener();

}

public void reloadSettings() {

mIsMetric = mSettings.isMetric();

mStepLength = mSettings.getStepLength();

mShouldTellSpeed = mSettings.shouldTellSpeed();

mShouldTellFasterslower =

mSettings.shouldTellFasterslower()

&& mSettings.getMaintainOption() == PedometerSettings.M_SPEED;

notifyListener();

}

public void setTts(TTS tts) {

mTts = tts;

}

public void setDesiredSpeed(float desiredSpeed) {

mDesiredSpeed = desiredSpeed;

}

private void notifyListener() {

mListener.valueChanged(mSpeed);

}

@Override

public void paceChanged(int value) {

if (mIsMetric) {

mSpeed = // kilometers / hour

value * mStepLength // centimeters / minute

/ 100000f * 60f; // centimeters/kilometer

}

else {

mSpeed = // miles / hour

value * mStepLength // inches / minute

/ 63360f * 60f; // inches/mile

}

tellFasterSlower();

notifyListener();

}

/**

* Say slower/faster, if needed.

*/

private void tellFasterSlower() {

if (mShouldTellFasterslower && mTts != null) {

long now = System.currentTimeMillis();

if (now - mSpokenAt > 3000 && !mTts.isSpeaking()) {

float little = 0.10f;

float normal = 0.30f;

float much = 0.50f;

boolean spoken = true;

if (mSpeed < mDesiredSpeed * (1 - much)) {

mTts.speak("much faster!", 0, null);

}

else

if (mSpeed > mDesiredSpeed * (1 much)) {

mTts.speak("much slower!", 0, null);

}

else

if (mSpeed < mDesiredSpeed * (1 - normal)) {

mTts.speak("faster!", 0, null);

}

else

if (mSpeed > mDesiredSpeed * (1 normal)) {

mTts.speak("slower!", 0, null);

}

else

if (mSpeed < mDesiredSpeed * (1 - little)) {

mTts.speak("a little faster!", 0, null);

}

else

if (mSpeed > mDesiredSpeed * (1 little)) {

mTts.speak("a little slower!", 0, null);

}

else {

spoken = false;

}

if (spoken) {

mSpokenAt = now;

}

}

}

}

public void passValue() {

// Not used

}

@Override

public void speak() {

if (mSettings.shouldTellSpeed() && mTts != null) {

if (mSpeed >= .01f) {

mTts.speak(("" (mSpeed 0.000001f)).substring(0, 4) (mIsMetric ? " kilometers per hour" : " miles per hour"), 1, null);

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值