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