상세 컨텐츠

본문 제목

[안드로이드] 블루투스(Bluetooth)통신 - 기기 검색하기

Programming/안드로이드

by 영상털이범 2014.03.17 22:30

본문

저번 포스팅에서는 블루투스를 활성화 하는 단계까지 진행하였다. 


이전 글 : 블루투스 활성화 글 보기 


이번에는 저번 프로젝트에 이어 기기 검색하는 부분부터 시작하겠다.


1. 기기 검색하기 - 프로젝트 파일 복사하기


기기 검색하기에 앞서 기기 검색하기 기능 실행시 보여줄 화면을 위해 안드로이드 블루투스 채팅 예제프로젝트에서 몇가지 파일을 가져오도록 하겠다. 번거로울수 있어서 아래 포스팅을 하였다. 접힌 내용을 펼쳐서 보길 바란다.

java 파일인 DeviceListActivity.java

레이아웃 xml 파일인 device_list.xml, device_name.xml

을 복사해서 붙여넣고 

[res]->[values]->[string.xml] 에 string 들을 추가해준다.(복사해서 붙여넣는다.)


.. 추가중


Manifest에 액티비티 추가(DeviceListActivity)를 해주는것도 잊지말자!


AndroidManifest.xml

        <activity android:name="ssm.bluetooth.MainActivity" 
                android:label="@string/app_name">
                    <intent-filter>
                        <action android:name="android.intent.action.MAIN">

                        <category android:name="android.intent.category.LAUNCHER">
                    </category>
                </action>
        </intent-filter>
        </activity>
        <!-- 여기서부터 추가 -->
        <activity android:name="ssm.bluetooth.DeviceListActivity" 
                android:theme="@android:style/Theme.DeviceDefault.Dialog">
        <!-- 여기까지 추가 -->


2. 기기 검색하기 - 코드 작성하기


기기 검색시 띄워줄 액티비티가 완성되었으니 이제 액티비티를 띄워줄 코드를 작성해보자

BluetoothService.java 파일에 scanDevice()라는 메소드를 생성하였다.


BluetoothService.java

public void scanDevice() {
		Log.d(TAG, "Scan Device");
		
		Intent serverIntent = new Intent(mActivity, DeviceListActivity.class);
		mActivity.startActivityForResult(serverIntent, REQUEST_CONNECT_DEVICE);
	}

startActivityForResult가 또 등장하였다!

저번 포스팅에서 봤던 녀석이 아닌가!

새로운 액티비티를 띄워서 처리된 결과값이 mActivity로 반환이 되는 코드이다.(mActivity는 MainActivity)


scanDevice() 메소드에서는 디바이스를 선택하는 액티비티를 띄워주고 선택하였을 경우 그 결과값을 MainActivity로 반환하고 있다. 


그렇다면 scanDevice()라는 기기를 검색을 요청하는 메소드는 어디에 추가를해야 될까?

기기의 블루투스 상태가 On 상태이고, 블루투스 연결 버튼을 눌렀을 경우,

또는 기기의 블루투스 상태가 Off상태 이었을때, 연결 버튼을 눌러 블루투스를 활성화 하였을 경우.

이 두가지 경우에 scanDevice()메소드를 호출하면 될 것이다. 

간단히 정리하자면 블루투스가 활성화 되어있는 상태에서 scanDevice()메소드를 호출하면 된다.




그럼 scanDevice()메소드를 호출하고, 기기를 선택하였을 경우 결과값을 반환 받았을때, MainActivity에서 처리해주는 소스를 작성해 보자.


MainActivity.java

public void onActivityResult(int requestCode, int resultCode, Intent data) {
        Log.d(TAG, "onActivityResult " + resultCode);
        
        switch (requestCode) {
        
        /** 추가된 부분 시작 **/
        case REQUEST_CONNECT_DEVICE:
            // When DeviceListActivity returns with a device to connect
            if (resultCode == Activity.RESULT_OK) {
            	btService.getDeviceInfo(data);
            }
            break;
        /** 추가된 부분 끝 **/
        case REQUEST_ENABLE_BT:
            // When the request to enable Bluetooth returns
            if (resultCode == Activity.RESULT_OK) {
            	// Next Step
            	btService.scanDevice();
            } else {

                Log.d(TAG, "Bluetooth is not enabled");
            }
            break;
        }
	}

requestCode가 REQUEST_CONNECT_DEVICE인 경우 getDeviceInfo()메소드를 호출하도록 하였다.

getDeviceInfo()메소드는 아직 구현하지 않았다. 

이 메소드는 기기선택 액티비티에서 선택한 기기의 정보를 받아 getDeviceInfo()라는 메소드로 전달을 해주고 getDeviceInfo()메소드는 그 정보를 이용하여 블루투스연결을 시도할 예정이다.


3. 검색된 기기에 접속하기 - 1


검색된 기기에 접속하기 위해서 getDeviceInfo()메소드를 작성해보자.


BluetoothService.java

	public void getDeviceInfo(Intent data) {
		// Get the device MAC address
		String address = data.getExtras().getString(DeviceListActivity.EXTRA_DEVICE_ADDRESS);
		// Get the BluetoothDevice object
		//BluetoothDevice device = btAdapter.getRemoteDevice(address);
		BluetoothDevice device = btAdapter.getRemoteDevice(address);
		
		Log.d(TAG, "Get Device Info \n" + "address : " + address);

		connect(device);
	}

address라는 String에는 선택한 기기의 주소가 담겨져 있고, 그 주소를 BluetoothDevice로 전달하여 connect()메소드로 전달하면 접속을 할 수 있다. connect()메소드는 아직 구현을 하지 않았다. 이제 connect()메소드만 구현하면 기기의 블루투스 연결은 가능할 것 이다.


4. 검색된 기기에 접속하기 - 2


이제부터는 많은 양의 복사 붙여넣기를 시도할 예정이다.

안드로이드 블루투스 채팅 예제의 BluetoothChatService의 connect()메소드를 붙여넣고, 이와 관련된 모든 소스를 붙여넣는다.

다음 포스팅을 보면서 진행하도록 하자.


다음 글 : 블루투스통신 연결하기 글 보기




관련글 더보기

댓글 영역

  • 프로필 사진
    2014.04.05 01:06
    비밀댓글입니다
    • 프로필 사진
      2014.04.05 03:58 신고
      지금까지는 잘 따라하셨나요? ㅋㅋ
      죄송합니다.. 사실 더 포스팅을 했어야 하는데
      그 뒤로 시간도 안나고 귀차니즘도 있어서 ..
      뒷 부분은 제가 오늘부터 포스팅 할 생각이니까 잘 봐주세요 ㅎㅎ
  • 프로필 사진
    2014.04.05 11:36
    비밀댓글입니다
  • 프로필 사진
    2014.05.19 15:22
    android:theme="@android:style/Theme.DeviceDefault.Dialog">
    이 소스가 어떤 의미인가요??

    소스를 복사해서 붙엿는데 이 부분이 빨간줄로 나오더라구요...-_ -;;
    • 프로필 사진
      2014.06.26 14:04 신고
      새로 추가한 DeviceListActivity의 테마를 변경해 주는 소스입니다.
      그 부분을 제거하였을 경우 디바이스를 선택하는 화면이 전체화면으로 나타나게 됩니다.
      하지만 저 부분을 넣어주면 다이얼로그액티비티로 나타나게 됩니다.
      저 부분에서 에러가 나신다면 액티비티를 메니페스트에서 다이얼로그액티비티로 띄우는 부분을 찾아서 수정하시면 될 듯 합니다!
  • 프로필 사진
    2014.05.25 18:22
    안녕하세요. 친절한 포스팅 덕분에 많이 배우고 있습니다~
    근데 블루투스 채팅 예제프로젝트는 어딨는건가요?
    • 프로필 사진
      2014.06.26 14:05 신고
      채팅예제 프로젝트는 이전 글에보시면
      안드로이드 예제 프로젝트를 생성하는 포스팅이 있습니다(접혀 있으니 펼쳐 보셔야 됩니다.)
      잘 못찾으시겠다면 인터넷 검색으로도 쉽게 구할 수 있습니다.
      아마 BluetoochChat 이라는 프로젝트 이름일 것입니다.
  • 프로필 사진
    2015.04.30 21:37
    혹시 기기간 블루투스 통신 인가요?????
  • 프로필 사진
    2015.05.19 17:30
    Manifest에 액티비티 추가(DeviceListActivity) 부분에서

    <activity android:name="ssm.bluetooth.DeviceListActivity" 부분이 빨간색으로 오류가 뜨는데
    이 소스는 무슨 의미인가요 ???
  • 프로필 사진
    2016.03.01 00:12
    기기 검색하기에 앞서 기기 검색하기 기능 실행시 보여줄 화면을 위해 안드로이드 블루투스 채팅 예제프로젝트에서 몇가지 파일을 가져오도록 하겠다. 번거로울수 있어서 아래 포스팅을 하였다. 접힌 내용을 펼쳐서 보길 바란다.
    java 파일인 DeviceListActivity.java
    레이아웃 xml 파일인 device_list.xml, device_name.xml
    을 복사해서 붙여넣고
    [res]->[values]->[string.xml] 에 string 들을 추가해준다.(복사해서 붙여넣는다.)

    이부분에서 접힌 내용을 펼쳐서 보길 바란다라고 되어있는데 접힌 내용이없고 추가중....이라는 말밖에없습니다 ㅠㅠ 어떤것을 복사붙여넣기 하라는 것인지 string들을 추가해준다도 어떤 것을 복사해서 붙여넣으라는 것인지 모르겠습니다
    • 프로필 사진
      2017.02.19 13:28
      DeviceListActivity.java 는
      예제소스로 공개 되어 구글링 하시면 금방나옵니다.
      bluetoothChat 예제에 다 들어있는듯
  • 프로필 사진
    2016.11.23 07:01
    [res]->[values]->[string.xml] 에 string 들을 추가해준다.(복사해서 붙여넣는다.)

    이부분에서 string들을 찾을 수가 없네요... string.xml 파일은 어디서 구할 수 있을까요?
  • 프로필 사진
    2017.04.12 14:33
    connect() 에서 막혀서 요녀석이어딨지? 하면서 엄청고민했었는데

    마지막을안읽었었네요 ㅋㅋ

    재밌게 따라하고있습니다 감사합니다
  • 프로필 사진
    2018.11.12 16:12 신고
    블루투스 기기 검색시뜨는창을 제가직접 만들고싶은데 어떻게해야하는지좀 알려주세요ㅠㅠ