반응형
1. pubspec.yaml 파일 수정
pubspec.yaml 파일을 열고 아래와 같이 permission_handler 값을 지정한 후
터미널에서 flutter pub get을 실행해 준다.
dependencies:
flutter:
sdk: flutter
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^1.0.2
flutter_reactive_ble: ^5.0.2
permission_handler: ^10.0.0
PS C:\Users\eangg\Desktop\Project\flutterproject\bleTest> flutter pub get
Running "flutter pub get" in bleTest... 2,424ms
PS C:\Users\eangg\Desktop\Project\flutterproject\bleTest>
2.AndroidManifest.xml 파일 수정
android/app/src/main/AndroidManifest.xml 파일을 열고 아래와 같이
uses-permission값을 지정한다.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.bletest">
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<application
위의 내용은 Android 12 아래 버전에 해당하며, Android 12부터는
uses-permission의 내용을 아래와 같이 변경된다.
Android 12 부터는 위치 관련 기능 없이 BLE만 구현한다면
ACCESS_FINE_LOCATION을 추가하지 않아도 되지만
하위 버전 호환을 위해 추가한다.
<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30"/>
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<!-- Android 12 이상에서는 BLE에서 위치 정보를 사용하지 않을 경우
ACCESS_FINE_LOCATION을 추가하지 않아도 되지만 하위 호환성을 위해 추가한다.-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
4. build.gradle 수정
android/app/src/build.gradle에서 아래와 같이
compileSdkVersion을 33으로 변경한다.
android {
//compileSdkVersion flutter.compileSdkVersion
compileSdkVersion 33
minSdkVersion을 21로 변경한다.
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.example.ble_example"
// You can update the following values to match your application needs.
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration.
//minSdkVersion flutter.minSdkVersion
minSdkVersion 21
3. dart파일 내용 추가
permission 관련 처리를 수행하는 dart 파일을 열고 아래와 같이
permission_handler.dart를 import한다.
import 'package:permission_handler/permission_handler.dart';
Future 함수를 정의하여 사용자에게 권한을 요청하도록 하고,
권한을 부여 받으면 BLE 관련 처리를 시작할 수 있도록 파일을 작성한다.
Future<bool> checkIfPermissionGranted() async {
Map<Permission, PermissionStatus> statuses = await[
// 위치 권한 허용 (Android 12 이상에서는 BLE에서 위치 정보를 사용하지 않을 경우
// location을 추가하지 않고 bluetoothScan만 있으면 되지만 하위 호환성을 위해
// 추가한다.
Permission.location,
Permission.bluetoothScan, // Android 12이상부터 추가된 근처 기기 접근 권한 허용
].request();
bool permitted = true;
statuses.forEach((permission, permissionStatus) {
if (!permissionStatus.isGranted)
permitted = false;
});
return permitted;
}
void _startScan() async {
if (Platform.isAndroid) {
if(await checkIfPermissionGranted()) {
_foundBleUARTDevices = [];
반응형
'Flutter > 기능 구현' 카테고리의 다른 글
[Flutter / BLE] 기능 구현 - CONNECT (0) | 2022.07.21 |
---|---|
[Flutter / BLE] 기능 구현 - SCAN (0) | 2022.07.07 |
[Flutter / BLE] flutter_reactive_ble 라이브러리 (0) | 2022.07.01 |