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

블루투스 연결해제 질문드립니다..

0 추천

다들 설연휴 잘 보내셧는지요

몇일내내 삽질중인 부분을 질문드립니다...ㅠ

일단 채팅기본예제에서 참고하여 소스를 수정해가고있습니다.

 

클래스3개가 있습니다

디바이스리스트 클래스(액티비티클래스임)에서 디바이스리스트뿌려주고 하나 선택시에

정보를 메인엑티비티로보냅니다

private AdapterView.OnItemClickListener pItemClickListener = new AdapterView.OnItemClickListener() {
 
        @Override
        public void onItemClick(AdapterView<?> list, View view, int position, long id) {
            mBtAdapter.cancelDiscovery();
            String address;
            PItem item = pItems.get(position);
            address = item.paddress;
            if (address.equals("")) {
//                Toast.makeText(this, "블루투스 페어링을 해주세요", Toast.LENGTH_SHORT).show();
                return;
            }
            Intent intent = new Intent();
            intent.putExtra(EXTRA_DEVICE_ADDRESS, address);
            setResult(Activity.RESULT_OK, intent);
            finish();
        }
    };

그리고 메인액티비티에서

public void onActivityResult (int requestCode, int resultCode, Intent data){
        switch (requestCode) {
            case REQUEST_CONNECT_DEVICE:
                    btService.getDeviceInfo(data); (블루투스서비스클래스로 데이터전달)
                }
                break;
            case REQUEST_ENABLE_BT:
                if (resultCode == Activity.RESULT_OK) {
                    btService.scanDevice();
                } else {
                    Toast.makeText(this, R.string.none_found, Toast.LENGTH_SHORT).show();
                }
                break;
        }
    }
 
그리고 액티비티에서 블루투스서비스로 데이터전달하여 연결시도합니다
 
생성자로 메인액티비티 정보받아와서 디바이스스캔과 연결을 처리합니다
 
public void connect(BluetoothDevice device) {
        mConnectThread = new ConnectThread(device);
        mConnectThread.start();
        setState(STATE_CONNECTING);
 
    }
 
여기서 문제가하나생겻습니다
디바이스리스트 클래스에서 버튼터치이벤트를 만들고 
그것을 클릭시 연결이 해제가 되게 처리하려하는데 
연결부분은 저렇게 디바이스정보받아와서 커넥트쓰레드생성해서 시작시키는데
 
연결해제부분은 어떻게 접근해야할지 삽질해봐도 감이안잡히네요
단순 여기서 소켓.close시키는거 메소드만들어서 접근해봣자 정보가 공유안대니 null만뜨네요
그렇다고 다시 연결쓰레드객체를 새로생성하는건 말도안대는거같고 
연결쓰레드내에 구현된 socket객체에 접근해보기도햇는데 안되네요..
어떻게 해결해야할까요 ㅠㅠ
 

설명이 너무 조잡해서 요약해봅니다

연결의 경우 리스트뿌려주는 액티비티클래스에서 리스트클릭시

setResult로 인텐트데이터 메인액티비티로 보내서 메인엑티비티에서 onActivityResult로 서비스딴에

있는 디바이스연결처리부분에 데이터넣어 처리함 

디바이스리스트에 연결해제버튼이 구현되어있는데 서비스딴에 소켓close를 접근못하고있음...ㅠㅠ

 

예림이그코드좀바바 (2,470 포인트) 님이 2015년 2월 23일 질문
예림이그코드좀바바님이 2015년 2월 23일 수정
자문자답입니다 ..
해결했습니다. 몇일넘게 한 삽질에서 값이 오고가는것을 분석한걸 토대로
리스트액티비티에서 버튼이벤트클릭시 인텐트에 대충 데이터를 넣어보낸다음
연결되는순간 startActivityForResult에 연결해제를위한 대충넣어놧던 데이터를
호출해서 메인액티비티에서 다시 서비스딴 연결해제메소드가 실행되게했습니다.
먼가 야매스럽긴한데 결과는 잘되네요.. 혹시 잘못된 방식이라면 태클걸어주세요..,

1개의 답변

+1 추천
 
채택된 답변
블루투스 연결에 관련된 모든 기능을 가진 서비스를 만드시고, 액티비티는 브로드캐스트로 서비스로 정보를 보내는게 어떠신지...
쎄미 (162,410 포인트) 님이 2015년 2월 23일 답변
예림이그코드좀바바님이 2015년 3월 2일 채택됨
답변감사드립니다..
그게 어려워서요 ㅠㅠ
연결에 관련된 서비스는 따로만든게 본문에 블루투스서비스클래스인데
그 서비스로 모든정보를 받아오기가 힘드네요..
일단 제가 위에한방법도 다이얼로그를 끄는순간에도 연결해제가 되어버려서
그냥 소켓을 스태틱전역변수화시켜서 close시켜버렸습니다..
서비스를 쓰는 방법에 대해 좀 더 알아보시면 될 것 같아요
...