안녕하세요. 블루투스 관련 앱을 만들고 있습니다.
지금까지 액티비티 A,B,C가 있으면 A액티비티에서 블루투스 통신을하고
블루투스 통신을 하는동안 받은 값을 핸들러로 받아서 텍스트뷰를 실시간으로 바꾸는 코드를 짰습니다.
그리고 액티비티 B,C에 intent로 데이터를 전달하여 블루투스로 받아온 값을 처리하였습니다.
구현하려는 액티비티를 A가 아닌 B,C에서도 실시간으로 데이터를 받게 코드를 짜고 싶어.
A에 있던 블루투스 통신 코드를 Service로 옮겨 데이터를 백그라운드에서 실시간으로 받는것까지 성공하였습니다.
하지만 Service에서 읽은 readMessage 값을 어떻게 액티비티 A,B,C로 실시간으로 넘겨줘야 하는지 잘 모르겠습니다.
public void run() { // 액티비티 A에 있던 코드
byte[] buffer = new byte[1024];
int bytes;
while (true) {
try {
bytes = mmInStream.available(); //InputStream mmInStream;
if (bytes != 0) {
SystemClock.sleep(100);
bytes = mmInStream.available();
bytes = mmInStream.read(buffer, 0, bytes);
mBluetoothHandler.obtainMessage(BT_MESSAGE_READ, bytes, -1, buffer).sendToTarget();
}
} catch (IOException e) {
break;
}
}
}
mBluetoothHandler = new Handler(){ // A 액티비티 핸들러
@SuppressLint("HandlerLeak")
public void handleMessage(android.os.Message msg){
if(msg.what == BT_MESSAGE_READ){
String readMessage = null;
try {
readMessage = new String((byte[]) msg.obj, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
Log.e("측정값", "" + readMessage);
textView.setText(""+readMessage);
}
}
};
@Override
public void run() { //액티비티A 에서 Service로 옮긴 코드
buffer = new byte[1024];
int bytes;
Log.d("service","connected thread run method");
while(true) {
try {
SystemClock.sleep(200);
bytes= inS.read(buffer);
String readMessage = null;
readMessage = new String((byte[]) buffer, "UTF-8");
Log.e("service", "" + readMessage);
} catch (IOException e) {
e.printStackTrace();
}
}
}