2016-11-07 25 views
0

私は1つのボタンでセンサー心拍を使用して、ここでラベル付けする方法を学ぶためにシンプルなアプリを作成した私のコードです:私はマニフェストに追加アンドロイドスタジオセンサー心拍アプリ

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

まず、使用しようとしている心拍センサが使用されている場合に、カメラを使用する許可を求めるのはなぜですか?

第2に、「表示心拍数」をクリックする時点でセンサーからのデータはまだありません(heartRateValueは空です)。データが最終的に実際にUIを更新しない場合は、あなたの状態を更新するだけです。私は何を示唆することは、たとえば、すべてのセンサーの変化にあなたのUIの状態を更新することです:

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

またはあなたは、(たとえその一行だけを考えた)コードの重複を避けるセッターを作成し、両方のクリックハンドラから呼び出すことができますセンサハンドラ:

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しようとしている、なぜですか?これを試してみてください:2分がセンサー上で私の指を保持するように私は待つ

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

をし、それが私ヌル –

+0

@Saharバヌヌは、 –

+0

見てください私の答えを編集し表示してまだヌル... –