-
안드로이드12 BT 권한강화ANDROID 2022. 2. 4. 15:20반응형
Need android.permission.BLUETOOTH_SCAN permission for AttributionSource
아이고... targetSdkVersion 을 31로 올리면서 위 에러가 발생했다.
이 글을 보신다면 저 검색어로 오신게 아닐까?^^;;;
말 그대로 퍼미션 더 추가하란 소리 같았다. 검색해보니 역시나 많은 자료가 나왔다.
https://developer.android.com/about/versions/12/features/bluetooth-permissions?hl=ko
Android 12의 새 블루투스 권한 | Android Developers
내년 초 출시될 대형 화면용 기능 출시인 12L을 준비하세요. 지금 사용해 보기 Android 12의 새 블루투스 권한 Android 12에서는 BLUETOOTH_SCAN, BLUETOOTH_ADVERTISE, BLUETOOTH_CONNECT 권한을 도입합니다. 이를 통
developer.android.com
BLUETOOTH_SCAN , BLUETOOTH_CONNECT , BLUETOOTH_ADVERTISE 3가지에 대한 설명이 있다.
bt 를 스캔 하고 , 통신하고 , 타 기기에서 연결 할 수 있게 하려면 3가지가 필요했다.
저 같은 경우는 scan 과 connect 만 필요했지만 ... 귀찮아서 그냥 셋 다 추가 하겠습니다.
그리고! 사용자 승인을 요청 해야한다.
예전처럼 AndroidManifest 에 추가만 하면 되는게 아니라 사용자 직접 승인이 필요해졌다.
파일에 추가만 하면 여전히 오류가 발생할 것이다.
그러면 2가지 작업을 해야한다.
1. AndroidManifest 추가
2. 사용자 승인
1. AndroidManifest 추가
<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30"/> <!-- android 12 add --> <!-- Needed only if your app looks for Bluetooth devices. If your app doesn't use Bluetooth scan results to derive physical location information, you can strongly assert that your app doesn't derive physical location. --> <uses-permission android:name="android.permission.BLUETOOTH_SCAN" /> <!-- Needed only if your app makes the device discoverable to Bluetooth devices. --> <uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" /> <!-- Needed only if your app communicates with already-paired Bluetooth devices. --> <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" /> <!--bibo01 : hardware option--> <uses-feature android:name="android.hardware.bluetooth" android:required="false"/> <uses-feature android:name="android.hardware.bluetooth_le" android:required="false"/> <!-- android 12 add -->
android 12 add 라고 작성한 부분이 그대로 추가되었고
<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />
이 부분에 android:maxSDKVersion="30" 옵션을 추가 했다.
2. 사용자 승인
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { requestPermissions( new String[]{ Manifest.permission.BLUETOOTH, Manifest.permission.BLUETOOTH_SCAN, Manifest.permission.BLUETOOTH_ADVERTISE, Manifest.permission.BLUETOOTH_CONNECT }, 1); } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { requestPermissions( new String[]{ Manifest.permission.BLUETOOTH }, 1); }
함수를 하나 만들어서 이렇게 작성했다.
어플을 실행하면 위와 같이 나올것이다.
다른 퍼미션 요청도 있었지만 글 쓰기 위해 잘라냈다.. 이렇게 먼저 사용자가 허용을 해주면 bt 작동도 정상적이다.
만약 허용전에 bt를 쓰려고 하면 어플이 강제 중지되니 잘 처리해야 할듯하다.
반응형'ANDROID' 카테고리의 다른 글
android12 targetSdkVersion 31 패키지를 파싱하는중 문제가 발생했습니다 (1) 2022.02.04 안드로이드11 - 카카오톡 띄우기 (다른 어플 띄우기) (0) 2021.12.28 웹뷰 err_unknown_url_scheme 오류 (0) 2021.10.08 [socket] 서버 <-> 클라이언트 간단예제 (0) 2018.05.09 String <-> byte , Hex 데이터 처리 (0) 2018.05.09