Я хочу прочитать тег NFC, пока устройство не отойдет от тега NFC.Тогда я хочу сделать некоторые действия.Мне удалось сделать это с помощью цикла while для чтения тега и перехвата InterruptedException.И я также хочу обновить пользовательский интерфейс при чтении тега внутри цикла while.Я не смог найти способ обновить пользовательский интерфейс, когда я нахожусь в цикле while.
Данные для обновления пользовательского интерфейса поступают из onLocationChanged-listener.
public void onLocationChanged(Location location) {
if (location.hasSpeed()) {
/*double speed=location.getSpeed() * 3.6;;
while (1==1)
{*/
speed = location.getSpeed() * 3.6;
String units="km/h";
s= new SpannableString(String.format(Locale.ENGLISH, "%.0f %s", speed, units));
s.setSpan(new RelativeSizeSpan(0.45f), s.length()-units.length()-1, s.length(), 0);
updateUI();
}
}
public void updateUI(){
drivingMode=findViewById(R.id.txtDriving);
currentSpeed = findViewById(R.id.valSpeed);
if (currentSpeed!=null) {
currentSpeed.setText(s);
if (speed > 10) {
drivingMode.setText(R.string.msg_driving);
isDriving = true;
} else {
drivingMode.setText(R.string.msg_notDriving);
isDriving=false;
}
}
}
private void readFromNFC( Ndef ndef) {
try
{
ndef.connect();
NdefMessage ndefMessage = ndef.getNdefMessage();
ndef.close();
String message = new String(ndefMessage.getRecords()[0].getPayload());
// Log.d(TAG, "readFromNFC Before Pass: " + message);
//Toast.makeText(this, "Text" + message, Toast.LENGTH_LONG).show();
if (message.equals("in")) {
Toast.makeText(this.getApplicationContext(), R.string.message_nfc_holder_detected, Toast.LENGTH_LONG).show();
if (isDialogshowing) {
dialog.dismiss();
isEmergency=false;
}
while (1 == 1) {
ndef.connect();
ndefMessage = ndef.getNdefMessage();
message = new String(ndefMessage.getRecords()[0].getPayload());
//Log.d(TAG, "readFromNFCPassed: " + message);
TimeUnit.SECONDS.sleep(1);
ndef.close();
updateUI();
}
} else {
Toast.makeText(this.getApplicationContext(), R.string.message_nfc_holder_error, Toast.LENGTH_LONG).show();
ndef.close();
}
} catch (IOException | FormatException | InterruptedException e ) {
e.printStackTrace();
Toast.makeText(this.getApplicationContext(), R.string.message_nfc_holder_detached, Toast.LENGTH_LONG).show();
if(isDriving) {
activateEmergency();
}
else
{
if (isDialogshowing) {
dialog.dismiss();
dialog.dismiss();
isDialogshowing = false;
}
}
}
}