2016-11-07 107 views
0

我创建了一个简单的应用程序来学习如何使用传感器心脏跳动有一个按钮和标签这里是我的代码:机器人工作室传感器心率应用

public class MainActivity extends AppCompatActivity implements SensorEventListener { 
    Button show; 
    TextView showHeartRate; 
    SensorManager sensorMgr; 
    Sensor heartRate; 
    String heartRateValue; 



    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     show = (Button) findViewById(R.id.button); 
     show.setOnClickListener(displayHeartRate); 
     showHeartRate = (TextView) findViewById(R.id.showHeartRate); 
     sensorMgr = (SensorManager)this.getSystemService(SENSOR_SERVICE); 
     heartRate = sensorMgr.getDefaultSensor(Sensor.TYPE_HEART_RATE); 

    } 
    View.OnClickListener displayHeartRate = new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      showHeartRate.setText(heartRateValue); 

     } 
    }; 

    @Override 
    protected void onResume() { 
     super.onResume(); 
    sensorMgr.registerListener(this,heartRate,SensorManager.SENSOR_DELAY_NORMAL); 

    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     sensorMgr.unregisterListener(this); 
    } 

    @Override 
    public void onSensorChanged(SensorEvent sensorEvent) { 
     heartRateValue = Integer.toString(sensorEvent.sensor.getType()); 

    } 

    @Override 
    public void onAccuracyChanged(Sensor sensor, int i) { 


    } 

我添加到清单:

<uses-permission android:name="android.permission.BODY_SENSORS"/> 

问题是没有调用onSensorChanged()。 我在这里检查了很多解决方案,但我没有找到任何东西

回答

1

首先,为什么你会问如果你正在尝试使用它的心率传感器,它会要求使用你的相机的权限?第二,我认为当你点击'显示心率'时,你只是没有任何传感器数据(heartRateValue为空),当数据最终到来时,你并不真正更新UI,你只更新你的状态。我的建议是对每个传感器的变化更新UI状态,例如:

@Override 
     public void onSensorChanged(SensorEvent sensorEvent) { 
      heartRateValue = Integer.toString(sensorEvent.sensor.getType()); 
      showHeartRate.setText(heartRateValue); 
     } 

或可避免代码重复(甚至以为它只有一行),创建一个setter和以及来自单击处理程序调用它和传感器处理程序:

private void setHeartrate(String rate) { 
    showHeartRate.setText(rate); 
} 

@Override 
public void onSensorChanged(SensorEvent sensorEvent) { 
    heartRateValue = Integer.toString(sensorEvent.sensor.getType()); 
    setHeartrate(heartRateValue); 
} 

View.OnClickListener displayHeartRate = new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     setHeartrate(heartRateValue); 
    } 
}; 

第三,不使用数据从传感器,看SensorEvent,数据来自于values数组,你只试图displat传感器类型,为什么呢?试试这个:

@Override 
     public void onSensorChanged(SensorEvent sensorEvent) { 
      heartRateValue = Integer.toString(sensorEvent.values.length > 0 ? sensorEvent.values[0] : 0.0f); 
      showHeartRate.setText(heartRateValue); 
     } 
+0

我等待如2分钟停留我的手指放在传感器上,它告诉我空 –

+0

@Sahar瓦努努编辑我的答案,请看看 –

+0

它仍然空... –