(Beta 3.1 시점에서) Android 12의 Bluetooth Permission
소개
Android 12에서 Bluetooth 연결을 할 때 Permission이 조금 바뀐 것 같습니다.
내 앱이 클라이언트로 다른 BLE 장치에 연결하는 경우 Permission에 어떤 차이가 있는지 살펴 보았습니다.
시뮬레이터의 동작 베이스로 확인한 내용으로 정리합니다만, 탐험을 위해 기재에 관해서 잘못이나 지적을 받을 수 있으면 살아납니다.
기본 API의 API Level에 의한 Permission 요구의 차이
API
API 레벨 30
API 레벨 31
BluetoothAdapter.isEnabled()
BLUETOOTH
BLUETOOTH, BLUETOOTH_CONNECT
BluetoothLeScanner.startScan()
BLUETOOTH_ADMIN, ACCESS_FINE_LOCATION
BLUETOOTH_ADMIN, BLUETOOTH_CONNECT, BLUETOOTH_SCAN
API
API 레벨 30
API 레벨 31
BluetoothAdapter.isEnabled()
BLUETOOTH
BLUETOOTH, BLUETOOTH_CONNECT
BluetoothLeScanner.startScan()
BLUETOOTH_ADMIN, ACCESS_FINE_LOCATION
BLUETOOTH_ADMIN, BLUETOOTH_CONNECT, BLUETOOTH_SCAN
코드 샘플
BluetoothDevice를 사용할 때 위치 정보가 필요하지 않은 경우 AndroidManifest.xml에 android:usesPermissionFlags="neverForLocation"을 지정합니다.
* Simulator를 사용할 때 usesPermissionFlags를 false로 설정하지 않으면 스캔 결과를 얻을 수 없습니다.
*usesPermissionFlags를 false로 설정한 상태에서도 rssi 값을 얻을 수 있습니다.
if (checkSelfPermission(Manifest.permission.BLUETOOTH_CONNECT) == PackageManager.PERMISSION_GRANTED &&
checkSelfPermission(Manifest.permission.BLUETOOTH_SCAN) == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, "Permissions are already granted.", Toast.LENGTH_SHORT).show();
} else {
requestPermissions(new String[]{Manifest.permission.BLUETOOTH_CONNECT, Manifest.permission.BLUETOOTH_SCAN}, CHECK_PERMISSION);
}
AndroidManifest.xml <!-- API Level 30未満では古いPermissionを使用する -->
<uses-permission android:name="android.permission.BLUETOOTH"
android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"
android:maxSdkVersion="30" />
<!-- API Level 31以降で必要なPermission -->
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT"/>
<uses-permission android:name="android.permission.BLUETOOTH_SCAN"
android:usesPermissionFlags="neverForLocation" />
상기 코드로 Permission 요구했을 때에 표시되는 시스템 다이얼로그
참고문헌
New Bluetooth permissions in Android 12
Bluetooth Low Energy 개요
Reference
이 문제에 관하여((Beta 3.1 시점에서) Android 12의 Bluetooth Permission), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/osashimi_lover/items/e27ac03e166360a9dfb5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
if (checkSelfPermission(Manifest.permission.BLUETOOTH_CONNECT) == PackageManager.PERMISSION_GRANTED &&
checkSelfPermission(Manifest.permission.BLUETOOTH_SCAN) == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, "Permissions are already granted.", Toast.LENGTH_SHORT).show();
} else {
requestPermissions(new String[]{Manifest.permission.BLUETOOTH_CONNECT, Manifest.permission.BLUETOOTH_SCAN}, CHECK_PERMISSION);
}
<!-- API Level 30未満では古いPermissionを使用する -->
<uses-permission android:name="android.permission.BLUETOOTH"
android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"
android:maxSdkVersion="30" />
<!-- API Level 31以降で必要なPermission -->
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT"/>
<uses-permission android:name="android.permission.BLUETOOTH_SCAN"
android:usesPermissionFlags="neverForLocation" />
New Bluetooth permissions in Android 12
Bluetooth Low Energy 개요
Reference
이 문제에 관하여((Beta 3.1 시점에서) Android 12의 Bluetooth Permission), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/osashimi_lover/items/e27ac03e166360a9dfb5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)