Java 如何在Android Studio中的线程内运行心率监视器代码片段

Java 如何在Android Studio中的线程内运行心率监视器代码片段,java,android,Java,Android,大家晚上好,我目前正在为我的大学做一个项目,我是Android编程新手。这项工作是创建一个监控包括心率在内的重要参数的应用程序。我找到了一段关于如何使用传感器监测心率的代码片段,这很好。我的任务是使代码片段适合一个线程,这让我陷入困境。有人有什么解决办法吗?我将不胜感激!我将在下面分享代码。我用的语言是Java public class HeartRateActivity extends AppCompatActivity { @Override protected void onCreate

大家晚上好,我目前正在为我的大学做一个项目,我是Android编程新手。这项工作是创建一个监控包括心率在内的重要参数的应用程序。我找到了一段关于如何使用传感器监测心率的代码片段,这很好。我的任务是使代码片段适合一个线程,这让我陷入困境。有人有什么解决办法吗?我将不胜感激!我将在下面分享代码。我用的语言是Java

public class HeartRateActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_heart_rate);
}

private String result;
private static final String TAG = "HEART_RATE";
private static final int BODY_SENSOR_PERMISSION_REQUEST = 1;

private void connectHeartRateSensor(){


    int permission = ActivityCompat.checkSelfPermission(this, Manifest.permission.BODY_SENSORS);

    if(permission == PERMISSION_GRANTED) {
        doConnectHeartRateSensor();
    } else {
        if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.BODY_SENSORS)) {

            Log.d(TAG, "E' Necessario abilitare il sensore Misura Battito Cardiaco per procedere alla misurazione");

        }
        ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.BODY_SENSORS},BODY_SENSOR_PERMISSION_REQUEST);
    }

}

@Override
public void onRequestPermissionsResult(int requestCode,
                                       @NonNull String[] permissions,
                                       @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == BODY_SENSOR_PERMISSION_REQUEST &&
            grantResults.length > 0 &&
            grantResults[0] == PERMISSION_GRANTED) {
        doConnectHeartRateSensor();
    } else {
        Log.d(TAG, "Accesso ai sensori corporei negato");
    }
}

private void doConnectHeartRateSensor(){
    SensorManager sm = (SensorManager)getSystemService(getApplicationContext().SENSOR_SERVICE);
    Sensor heartRateSensor = sm.getDefaultSensor(Sensor.TYPE_HEART_RATE);

    if(heartRateSensor == null){
        Log.d(TAG, "Non e' presente alcun sensore Misura Battito Cardiaco sul dispositivo");
    } else {
        sm.registerListener(mHeartRateListener, heartRateSensor,SensorManager.SENSOR_DELAY_NORMAL);
    }

}

final SensorEventListener mHeartRateListener = new SensorEventListener() {
    @Override
    public void onSensorChanged(SensorEvent event) {
        if(event.sensor.getType() == Sensor.TYPE_HEART_RATE){
            if(event.accuracy == SensorManager.SENSOR_STATUS_NO_CONTACT || event.accuracy == SensorManager.SENSOR_STATUS_UNRELIABLE){
                Log.d(TAG, "Il sensore risulta inaffidabile, occore ci sia contatto col corpo");
            }
        } else {
            float currentHeartRate = event.values[0];
            Log.d(TAG ," Il battito risulta essere di " + currentHeartRate + " pulsazioni per minuto");
        }
    }

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

    }
};
这是应该监控心率的代码片段,下面是代码的另一部分,线程。目前线程实现了一个伪活动,我将在了解如何将真实活动融入其中时删除它

public void startHeartRate(View v) {
    Context context = getApplication();
    Toast toast = Toast.makeText(context, "Avvia la misura della Frequenza Cardiaca", Toast.LENGTH_SHORT);
    toast.show();


    new Thread(new Runnable() {





        @Override
        public void run() {
            try {

                Thread.sleep(4000);
                result = new String("65");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            // Attività conclusiva del Thread con aggiornamento della UI
            TextView txt=(TextView)findViewById(R.id.textViewHeartRate);
            txt.post(new Runnable() {
                public void run() {
                    txt.setText(result);
                }
            });
        }
    }).start();
}