안드로이드 스튜디오 블루투스 프로그래밍
App/Android

안드로이드 스튜디오 블루투스 프로그래밍

1. Android 플랫폼에서의 블루투스

 => 안드로이드는 블루투스에 대한 지원을 포함하므로, 블루투스 기기와 데이터를 무선으로 교환할 수 있다.

 

   - Android 애플리케이션에서 수행할 수 있는 역할

 

 

 

2. 블루투스 연결 과정

   : 다른 블루투스 장치와의 데이터 송수신을 위해서는 일반적으로 아래의 네가지 작업을 순서대로 진행해야 한다.

   

   1) 블루투스 설정

   2) 페어링 되었거나 페어링되지 않은 주변 블루투스 장치 검색

   3) 다른 블루투스 장치와 연결

   4) 장치간 데이터 전송

 

+) 페어링과 연결의 차이점

    - 페어링: 검색된 장치를 등록하는 절차. 블루투스에서는 페어링된 장치와의 연결만 가능하며, 연결 이후에 데이터 송수신이 가능하다. => 두 블루투스 장치가 서로의 존재를 알고 있고, 인증에 사용할 키를 공유하고 있어 암호화된 연결이 가능하다는 의미이다.

 

  - 연결: 두 블루투스 장치가 RFCOM 채널을 공유하고 있어 데이터 송수신이 가능하다는 의미이다.

 

 

   -1) 블루투스 퍼미션

  => 안드로이드 앱에서는 블루투스를 사용하기 위해 bluetooth permission 을 설정해주어야 한다.

 

☞ AndroidManifest.xml 

<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

  

  -2) 블루투스 설정

  => 앱이 블루투스로 통신하기 위해서는 블루투스를 지원하여야 하며, 블루투스를 지원하는 경우에는 블루투스 기능을 사용할 수 있도록 설정되어있는지를 확인해야 한다. 

 : 만약 블루투스기능이 꺼져있으면, 앱 내에서 이를 활성화할수 있도록 하는 방법이 있다.

 

=> 이 설정은 BluetoothAdapter를 통해 두 단계로 이루어진다.

 

1. 블루투스 어댑터 얻기

BluetoothAdapter mBluetoothAdapter= BluetoothAdapter.getDefaultAdapter();
if(mBluetoothadapter == null) {
   //장치가 블루투스를 지원하지 않는 경우. 
   //ex) 블루투스가 이용불가합니다 라는 메세지를 토스트 형식으로 띄운다.
   FragmentActivity activity = getActivity();
            Toast.makeText(activity, "Bluetooth is not available", Toast.LENGTH_LONG).show();
            activity.finish();
}
 
else {
   // 장치가 블루투스를 지원하는 경우. 
}
 

 

2. 블루투스 활성화

 => 블루투스가 활성 상태인지 검사하여야 한다. 활성 상태를 검사하기 위해서는 블루투스 어댑터 객체의 isEnabled 함수를 사용할 수 있으며, 활성 상태인 경우 true를, 비활성 상태인 경우 false를 반환한다.

 

=> 블루투스 비활성 상태에서 활성 상태로 변경하기 위해서는 BluetoothAdapter의 ACTION_REQUEST_ENABLE intent를 이용해서 startActivityForResult를 호출하면 된다.

if(!m.BluetoothAdapter.isEnabled()){
  Intent enableBtIntent=new Intent(BluetoothAdapater.ACTION_REQUEST_ENABLE);
  startActivityForResult(enabledBtIntent,REQUEST_ENABLE_BT);
  
  //REQUEST_ENABLE_BT는 사용자 정의상수로, 블루투스 활성 상태의 변경 결과를 앱으로 알려줄 때 
  //식별자로 사용되어 0보다 큰 수로 정의해야 한다.
}

 

=> startActivityForResult 함수가 호출되면 블루투스를 활성화하기 위해 사용자의 동의를 구하는 다이얼로그 출력.

void checkBlueTooth() {
    mBluetoothAdapter = BlueAdapter.getDefaultAdapter();
   if(mBluetoothAdapter == nulll) {
      // 장치가 블루투스 지원하지 않는 경우
      finish();   // 어플리케이션 종료
   }
 
   else {
     // 장치가 블루투스 지원하는 경우
    if(!mBluetoothAdapter.isEnabled()) {
    // 블루투스를 지원하지만 비활성 상태인 경우 
    // 블루투스를 활성 상태로 바꾸기 위해 사용자 동의 요첨
    Intent enable BtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);   
    startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
   }
   
   else {
   // 블루투스를 지원하며 활성 상태인 경우
   // 페어링된 기기 목록을 보여주고 연결할 장치를 선택. 
    }
  }
}


 

 

 

=> 해당 다이얼로그에서 선택한 결과는 onActivityResult 함수에서 확인할 수 있다.

  - RESULT_OK: 블루투스 활성화 상태로 변경된 경우

  - RESULT_CANCELED : 사용자가 아니오를 선택하여 비활성 상태로 남아있는 경우.

 

 

 

- 출처 -

1)developer.android.com/guide/topics/connectivity/bluetooth?hl=ko

 

블루투스 개요  |  Android 개발자  |  Android Developers

The Android platform includes support for the Bluetooth network stack, which allows a device to wirelessly exchange data with other Bluetooth devices. The application framework provides access to the Bluetooth functionality through the Android Bluetooth…

developer.android.com

2) hyoin1223.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EB%B8%94%EB%A3%A8%ED%88%AC%EC%8A%A4-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D?category=578474

 

안드로이드 블루투스 프로그래밍

Chapter 61. 안드로이드 블루투스 프로그래밍 1.블루투스 안드로이드 플랫폼은 블루투스 연결에 대한 지원이 포함되어 있어 손쉽게 다른 블루투스 장치와의 무선 데이터 교환이 가능함 블루투스

hyoin1223.tistory.com