마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

블루투스 데이터통신 소스수정좀 도와주세요ㅠㅠ

0 추천

이 소스는 블루투스 통신 소스중에 일부분인데요 이 소스를 조금 수정해볼려고 하는데..계속 실패만 하네요 ㅠㅠ

1)한쪽에서 test 라는 문자를 전송하면 다른 한쪽에서 TEST라는 문자를 출력하도록 소스 수정

2)한쪽에서 소문자를 보내면 다른 한쪽에서는 대문자로 출력 (이건 해결!아주 간단한 거였네요 ㅎㅎ)

이렇게 두개를 만드려고 하는데 잘 되지 않네요 ㅠㅠ 고수님들 도와주세요ㅠㅠ

// 메시지를 화면에 표시
public void showMessage(String strMsg) {
    // 메시지 텍스트를 핸들러에 전달
    Message msg = Message.obtain(mHandler, 0, strMsg);
    mHandler.sendMessage(msg);
    Log.d("tag1", strMsg);
}

// 메시지 화면 출력을 위한 핸들러
Handler mHandler = new Handler() {
    public void handleMessage(Message msg) {
        if (msg.what == 0) {
            String strMsg = (String)msg.obj;
            mTextMsg.setText(strMsg);
        }
    }
};

// 원격 디바이스와 접속되었으면 데이터 송수신 스레드를 시작
public void onConnected(BluetoothSocket socket) {
    showMessage("Socket connected");

    // 데이터 송수신 스레드가 생성되어 있다면 삭제한다
    if( mSocketThread != null )
        mSocketThread = null;
    // 데이터 송수신 스레드를 시작
    mSocketThread = new SocketThread(socket);
    mSocketThread.start();
}

// 데이터 송수신 스레드
private class SocketThread extends Thread {
    private final BluetoothSocket mmSocket; // 클라이언트 소켓
    private InputStream mmInStream; // 입력 스트림
    private OutputStream mmOutStream; // 출력 스트림

    public SocketThread(BluetoothSocket socket) {
        mmSocket = socket;

        // 입력 스트림과 출력 스트림을 구한다
        try {
            mmInStream = socket.getInputStream();
            mmOutStream = socket.getOutputStream();
        } catch (IOException e) {
            showMessage("Get Stream error");
        }
    }

    // 소켓에서 수신된 데이터를 화면에 표시한다
    public void run() {
        byte[] buffer = new byte[1024];
        int bytes;

        while (true) {
            try {
                // 입력 스트림에서 데이터를 읽는다
                bytes = mmInStream.read(buffer);
                String strBuf = new String(buffer, 0, bytes);
                showMessage("Receive: " + strBuf);
                SystemClock.sleep(1);
            } catch (IOException e) {
                showMessage("Socket disconneted");

                break;
            }
        }
    }

    // 데이터를 소켓으로 전송한다
    public void write(String strBuf) {
        try {
            // 출력 스트림에 데이터를 저장한다
            byte[] buffer = strBuf.getBytes();
            mmOutStream.write(buffer);
            showMessage("Send: " + strBuf);
        } catch (IOException e) {
            showMessage("Socket write error");
        }
    }
}

// 버튼 클릭 이벤트 함수
public void onClick(View v) {
    switch( v.getId() ) {
        case R.id.btnSend : {
            // 데이터 송수신 스레드가 생성되지 않았다면 함수 탈출
            if( mSocketThread == null ) return;
            // 사용자가 입력한 텍스트를 소켓으로 전송한다
            String strBuf = mEditData.getText().toString();
            if( strBuf.length() < 1 ) return;
            mEditData.setText("");
            mSocketThread.write(strBuf);
            break;
        }
    }
}
kises2003 (240 포인트) 님이 2017년 5월 11일 질문
kises2003님이 2017년 5월 11일 수정

1개의 답변

0 추천
 
채택된 답변
아직 해답을 못찾으셨나봅니다...

대충보아하니 버튼 클릭하는 onClick에서는 메시지를 보내고

핸들러에서 메시지를 받고 있는거 같은데

 

받은 문자열을 또는 보낼 문자열을 대소문자 변환작업만 해주시면 되는거 같네요

 

http://yonoo88.tistory.com/250
Charlesz (4,420 포인트) 님이 2017년 5월 11일 답변
kises2003님이 2017년 5월 11일 채택됨
소문자를 대문자로 바꾸는거는 했습니다..
근데 test 라는 소문자를 보냈을 때에만
대문자 TEST로 출력하는 문제를 해결못했습니다ㅠㅠ
아직 프로그래밍이 익숙치 않으신가봅니다.
"~한경우, ~했을때만....~일때"는 조건문입니다. if 문 쓰시면되죠.

if (strMsg.equals("test")) {
    strMsg = strMsg.toUpperCase();
}
아!정말 감사합니다ㅎㅎ
안드로이드하기전에 c#을 했어서....이퀄스대신 자꾸 ==을 넣으니 안됐었네요...
정말 감사드립니다 덕분에 잘 해결했습니닿ㅎ
객체비교는 equals입니다 ㅎㅎㅎ
해결하셨다니 다행입니다 ㅎ
...