Development record of developer who study hard everyday.

레이블이 안드로이드블루투스인 게시물을 표시합니다. 모든 게시물 표시
레이블이 안드로이드블루투스인 게시물을 표시합니다. 모든 게시물 표시
, , , ,

안드로이드 12 블루투스 권한 완벽정리

 회사에서 ble 연결을 통해 데이터를 주고받는 앱을 수정하는데 알 수 없는 버그가 발견되었다.

고객사 측에서는 ble연결 후에 앱 안에서의 음원이 자꾸 끊긴다는 이야기였다.

도통 무슨 소리인지 알 수가 없어서 이해가 안됐는데 안드로이드 공식문서를 보다가 실마리를 찾았다.

안드로이드 12가 나오면서 블루투스 권한이 변경되었다는 것이다.

https://developer.android.com/guide/topics/connectivity/bluetooth/permissions

지금부터 설명할 내용은 위 안드로이드 공식문서를 바탕으로 작성되었다.

1. Android 12 블루투스 권한

앱이 Android 12 (API level 31)이상을 타겟한다면 매니페스트 파일에 아래 권한 3개를 추가해주어야한다.

BLUETOOTH_SCAN

BLUETOOTH_ADVERTISE

BLUETOOTH_CONNECT


안드로이드 11 이하에서 블루투스 권한을 선언했을 때 필요한 

BLUETOOTH

BLUETOOTH_ADMIN

은 선언시에 android:maxSdkVersion="30" 를 붙여준다.


스캔시에 장치의 물리적 위치를 가져오고싶다면 ACCESS_FINE_LOCATION 을 선언해주면 된다.

<!-- Request legacy Bluetooth permissions on older devices. -->
<uses-permission android:name="android.permission.BLUETOOTH"
android:maxSdkVersion="30"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"
android:maxSdkVersion="30"/>

<!--android 12 new bluetooth permission-->
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN"
android:usesPermissionFlags="neverForLocation"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />

<uses-permission-sdk-23 android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="30" />

위의 코드가 Android12에서 최종적인 manifest파일에서의 블루투스 권한 선언 내용이다.

이제, 런타임시에 BLUETOOTH_CONNECT, BLUETOOTH_SCAN, BLUETOOTH_ADVERTISE 권한을 요청해주면 된다.

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Log.d(TAG, "onCreate")

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S)
ActivityCompat.requestPermissions(
this,
arrayOf(
Manifest.permission.BLUETOOTH_SCAN,
Manifest.permission.BLUETOOTH_ADVERTISE,
Manifest.permission.BLUETOOTH_CONNECT
),
Constants.Permission.REQ_CODE_BLE
)
}

이런식으로 요청해주면 된다.

원래는 권한이 거부상태이면, 요청하는게 맞지만 지금은 연습하는 과정이기때문에 생략한다.


Share:
Read More