Toggle Button을 통해서 블루투스 기능을 On/Off 해보자.
1. Bluetooth 권한 등록
어플리케이션에서 블루투스 기능을 사용하려면 두 개의 권한을 선언해야 한다.
BLUETOOTH는 연결 요청, 연결 수락 및 데이터 전송과 같은 블루투스 통신을 수행하는데 필요하다.
ACCESS_FINE_LOCATION은 블루투스 스캔을 사용하여 사용자 위치에 대한 정보를 수집할 수 있다. 이 정보는 사용자 본인의 기기에서 가져올 수도 있고, 상점 및 교통 시설과 같은 위치에서 사용 중인 블루투스 비콘에서 가져올 수도 있다.
앱에서 기기 검색을 시작하거나 블루투스 설정을 조작하려면 BLUETOOTH 권한 외에 BLUETOOTH_ADMIN 권한도 선언해야한다. 대부분 애플리케이션은 로컬 블루투스 기기를 검색하는 기능에만 이 권한이 필요하다. 어플리케이션이 사용자 요청 시 블루투스 설정을 수정하는 '파워 관리자'가 아닌 경우 이 권한이 부여하는 다른 기능을 사용해서는 안된다.
★ 참고 : 어플리케이션이 Android9 (API 레벨 28) 이하를 대상으로 하는 경우 ACCESS_FINE_LOCATION 권한 대신 ACCESS_COARSE_LOCATION 권한을 선언할 수 있다.
어플리케이션 Manifest.xml 파일에 블루투스 권한을 다음과 같이 선언한다.
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- If your app targets Android 9 or lower, you can declare
ACCESS_COARSE_LOCATION instead. -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
2. layout xml 수정
activity_main.xml에 다음과 같이 Bluetooth 기능을 On/Off 할 수 있는 Toggle Button을 추가한다.
<ToggleButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/ble_on_off_btn"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
3. Kotline code 수정
먼저 bluetooth defaultAdapter를 전역변수에 저장한다.
Bluetooth가 켜져있으면 어플 실행 시 Toggle Button의 텍스트가 On으로, Bluetooth가 꺼져있으면 어플 실행 시 Toggle Button의 텍스트가 Off로 표시된다. Toggle Button을 누르면 전역변수에 저장된 bluetoothAdapter를 통해, 현재 기기가 Bluetooth 기능을 지원하는지 확인 후, 지원하면 Toggle 버튼의 상태에 따라서 Bluetooth를 On/Off 한다.
package com.example.bluetoothapp
import android.bluetooth.BluetoothAdapter
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.ToggleButton
class MainActivity : AppCompatActivity() {
private val REQUEST_ENABLE_BT=1
private var bluetoothAdapter: BluetoothAdapter? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val bleOnOffBtn:ToggleButton = findViewById(R.id.ble_on_off_btn)
bluetoothAdapter = BluetoothAdapter.getDefaultAdapter()
if(bluetoothAdapter!=null){
// Device doesn't support Bluetooth
if(bluetoothAdapter?.isEnabled==false){
bleOnOffBtn.isChecked = true
} else{
bleOnOffBtn.isChecked = false
}
}
bleOnOffBtn.setOnCheckedChangeListener { _, isChecked ->
bluetoothOnOff()
}
}
fun bluetoothOnOff(){
if (bluetoothAdapter == null) {
// Device doesn't support Bluetooth
Log.d("bluetoothAdapter","Device doesn't support Bluetooth")
}else{
if (bluetoothAdapter?.isEnabled == false) { // 블루투스 꺼져 있으면 블루투스 활성화
val enableBtIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT)
} else{ // 블루투스 켜져있으면 블루투스 비활성화
bluetoothAdapter?.disable()
}
}
}
}
'Mobile Programming > Android' 카테고리의 다른 글
[Kotlin] BLE 기기 연결하기 (7) | 2021.01.06 |
---|---|
[Kotlin] BLE 기기 검색하기 (45) | 2020.12.28 |
[Kotlin] 페이스북 로그인 이용하기 (2020.08) (0) | 2020.08.26 |
[Kotlin] 구글 로그인 이용하기 (2020.08) (4) | 2020.08.24 |
[Kotlin] 카카오 로그인 이용하기 (2020.08) (0) | 2020.08.20 |
댓글