반응형

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 = [];

 

반응형

+ Recent posts