Обновление TextViews с помощью IntentService
В настоящее время я пытаюсь обновить свой пользовательский интерфейс с помощью IntentService, мне нужно его использовать, потому что я работаю с подключением по Bluetooth и проверяю соединение со службой, но я также хочу обновить пользовательский интерфейс и в случае подключения по Bluetooth больше не доступно закрыть фрагмент. Соединение bluetooth выполнено Asynctask.
Моя ссылка на это видео: https://www.youtube.com/watch?v=9FweabuBi1U
Я действительно хотел бы использовать runonUIthread() из службы intentservice.
Код фрагмента
package com.josefernando.test_xd;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.bluetooth.BluetoothSocket;
import android.widget.TextView;
import java.io.IOException;
import java.io.InputStream;
import org.json.JSONException;
import org.json.JSONObject;
public class AddFragment extends Fragment {
//widgets
EditText etxt_date, etxt_equipment, etxt_serial, etxt_client,
etxt_range_test, etxt_period;
Button btn_add;
TextView s1_value;
//class helper
DatabaseHelper mDatabaseHelper;
//variables
private int value_range;
private int value_period;
//bundles
Bundle bundle;
//handlers
Handler handler_range = new Handler();
Handler handler_period = new Handler();
//bluetooth
String address = null;
BluetoothSocket BTSocket = null;
//jsonObject
JSONObject mainObject;
public AddFragment() {
// Required empty public constructor
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
bundle = this.getArguments();
if (bundle != null){
address = bundle.getString(DeviceListFragment.EXTRA_ADDRESS, address);
Log.d("PASSING", "the address is: " + address);
}
BTasynk task = new BTasynk(this.getContext(), address, new BTasynk.BTAsyncResponse() {
@Override
public void processFinish(BluetoothSocket socket) {
BTSocket = socket;
if (BTSocket != null){
Log.d("MAIN", "RECEIVED");
getActivity().getApplicationContext().startService(new Intent(getActivity().getApplicationContext(), BTservice.class));
}
else{
Log.d("MAIN", "NOT RECEIVED");
}
}
});
task.execute();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_add, container, false);
btn_add = v.findViewById(R.id.btn_add);
etxt_date = v.findViewById(R.id.etxt_date);
etxt_equipment = v.findViewById(R.id.etxt_equipment);
etxt_serial = v.findViewById(R.id.etxt_serial);
etxt_client = v.findViewById(R.id.etxt_client);
etxt_range_test= v.findViewById(R.id.etxt_range_test);
etxt_period = v.findViewById(R.id.etxt_period);
s1_value = v.findViewById(R.id.txt_s1_value);
mDatabaseHelper = new DatabaseHelper(getActivity());
//getActivity().getApplicationContext().startService(new Intent(getActivity().getApplicationContext(), BTservice.class));
btn_add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
/*
String[] equipment = new String[6];
equipment[0] = etxt_date.getText().toString();
equipment[1] = etxt_equipment.getText().toString();
equipment[2] = etxt_serial.getText().toString();
equipment[3] = etxt_client.getText().toString();
equipment[4] = etxt_range_test.getText().toString();
equipment[5] = etxt_period.getText().toString();
mDatabaseHelper.addDataTable1(equipment);*/
value_range = (Integer.parseInt(etxt_range_test.getText().toString())) * 60100;
value_period = (Integer.parseInt(etxt_period.getText().toString())) * 60000;
btn_add.setEnabled(false);
handler_range.postDelayed(range, value_range);
handler_period.postDelayed(period, value_period);
}
});
return v;
}
private void receiveData() throws IOException{
InputStream socketInputStream = BTSocket.getInputStream();
byte[] buffer = new byte[256];
int bytes;
String readMessage;
String test;
try {
bytes = socketInputStream.read(buffer); //read bytes from input buffer
readMessage = new String(buffer, 0, bytes);
mainObject = new JSONObject(readMessage);
test = mainObject.getString("S1");
// Send the obtained bytes to the UI Activity via handler
Log.i("logging",test + "");
} catch (IOException | JSONException e) {}
}
//
//Handlers Runnables
private Runnable range = new Runnable() {
@Override
public void run() {
Log.d("RANGE", "se termina la prueba");
btn_add.setEnabled(true);
handler_period.removeCallbacks(period);
}
};
private Runnable period = new Runnable() {
@Override
public void run() {
Log.d("PERIOD", "se registra cada segundo");
handler_period.postDelayed(period, value_period);
}
};
}