2016-11-07 86 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

它仍然空... –