【问题标题】:Getting the value of a constantly changing integer获取不断变化的整数的值
【发布时间】:2015-11-29 04:29:05
【问题描述】:

我正在使用 android 传感器,特别是 TYPE_STEP_COUNTER。 TYPE_STEP_COUNTER 返回的值不断增加,没有办法重置它(据我所知)。我需要做的是获取从用户按下按钮开始的步数。

我愿意:

int steps = overallTotal - totalWhenButtonPressed

如何获得 totalWhenButtonPressed 的值?

我不能totalWhenButtonPress = event.values[0],因为值不断变化。

【问题讨论】:

  • 你能解释一下为什么你不能做totalWhenButtonPress = event.values[0],因为这正是我会做的。原始值被复制,您的total... 在另一个更改时不会更改,以防您正在考虑。
  • @zapl 我不能做 totalWhenButtonPress = event.values[0] 因为 event.values[0] 不断更新。因此,如果我稍后引用 totalWhenButtonPress,则该值将是 event.values[0] 处的新值
  • 事实并非如此。该行执行的那一刻,它将当前值复制到total..。两者之间没有联系,因为int 不是参考。即使它是一个对象,您也会将引用复制到values[0] 的当前内容。您不与value[0] 共享参考。每个人都有自己的参考,无论它是什么。 stackoverflow.com/questions/40480/…解释
  • 没有骰子,我的代码:'Sensor stepCtr = sm.getDefaultSensor(Sensor.TYPE_STEP_COUNTER); sm.registerListener(mSensorCounter, stepCtr, SensorManager.SENSOR_DELAY_NORMAL);' '私有 SensorEventListener mSensorCounter = new SensorEventListener() { public void onSensorChanged(SensorEvent event) { TextView txtStepVals = ... int ogSteps = Math.round(event.values[0]);双 currSteps = event.values[0]; txtStepVals.setText("CurrSteps = " + currSteps + "\nOgSteps = " + ogSteps + "\nSteps: " + (currSteps - ogSteps)); } };'
  • 我看不懂 :) 请edit 您的问题并妥善格式化。 psint ogSteps是不是回调中的局部变量,每次调用这个方法都会被覆盖? cs.umd.edu/~clin/MoreJava/Objects/local.html(“局部变量没有记忆”)

标签: java android integer sensors


【解决方案1】:

它应该大致像这样工作

private int mLatestValue;
private int mButtonPressedValue;

void onCreate(..) {
    Sensor stepCtr = sm.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);
    sm.registerListener(mSensorCounter, stepCtr, SensorManager.SENSOR_DELAY_NORMAL);
    Button button = button.setOnClickListener(mButtonClick);
}

private OnClickListener mButtonClick = new OnClickListerner() {
    public void onClick(View view) {
        mButtonPressedValue = mLatestValue;
    }
}
private SensorEventListener mSensorCounter = new SensorEventListener() {
    public void onSensorChanged(SensorEvent event) {
        mLatestValue = Math.round(event.values[0]);
        txtStepVals.setText("CurrSteps = " + mLatestValue + "\nSteps: " + (mLatestValue - mButtonPressedValue));
    }
};

您需要将当前传感器存储在SensorEventListener 之外,以便在按下按钮后存储该值。然后简单地与按下按钮时存储的值进行比较。

【讨论】:

    【解决方案2】:

    我能够通过使用 TYPE_STEP_DETECTOR 解决问题。我没有尝试在某个时间点获取数字,而是在操作发生时更新了数字。以下代码来自 SensorEventListener 的 onSensorChanged 方法

    currSteps = currSteps + Math.round(event.values[0]);
            TextView txtSessionStepVals = (TextView) findViewById(R.id.txtSessionStepValues);
            txtSessionStepVals.setText("Steps this Session: " + currSteps);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-23
      • 1970-01-01
      • 2019-09-23
      • 2012-12-15
      • 1970-01-01
      • 2015-08-06
      • 2021-04-14
      相关资源
      最近更新 更多