Flutter - Bluetooth(플러터 블루투스) 사용방법
Flutter

Flutter - Bluetooth(플러터 블루투스) 사용방법

728x90

 

이런 크로스 플랫폼을 개발을 위해 사용하면서 가장 이점은

블루투스 같은 기능을 한번에 구현할 있다는 장점이라고 생각합니다.

 

일단 프로젝트를 하나 생성해 주세요.

 

저희가 사용하는 Flutter에서는 Flutter Native Bluetooth 라이브러리는 따로 없으니

능력자분들이 만들어 놓은 플러그인 라이브러리를 사용해서 구현해보겠습니다.

 

이제 pub.dev사이트에 들어가시면 여러 플러그인 라이브러리가 존재합니다.

제가 사용해 봤을땐 개인적으로

 

https://pub.dev/packages/flutter_blue

 

라이브러리가 제일 사용하기도 편하고 제가 원하는 기능들이 웬만큼 구현되어 있어서

사용하기 편하더라구요.

 

플러그인 라이브러리를 사용해서 구현해 보겠습니다.

언제나 라이브러리를 사용할 때는 pubspec.yaml  dependencies 추가해 주세요.

현재 최신버전은 v0.7.2 버전이니 추가를 해줍시다.

 

추가했다면 이후에 상단에 존재하는 Pub get 버튼을 클릭해 주세요

 

또한 해당 라이브러리 github 들어가보시면

Setup 항목에

Change the minSdkVersion for Android

 

안드로이드 최소버전을 맞추라고 되어있네요

설명과 같이 수정해 줍시다. (물론 최소버전이기 때문에 21이상도 상관은 없습니다.)

 

 

좌측 프로젝트 목록에서 android폴더 우클릭 Android Studio 따로 열어서 수정해 주세요

 

그럼 열린 Andorid프로젝트에서

좌측 Gradle Scripts -> build.gradle(Module: app) 클릭

 

수정 상단에 Sync Now버튼을 클릭해 주세요.

 

 

Sync 끝났다면 Native 블루투스 기능을 구현하던, Flutter 블루투스를 구현하던

우리는 블루투스 권한을 획득해야 합니다.

 

물론 Flutter에는 이러한 권한을 핸들러로 처리해주는 라이브러리도 존재하지만

오늘은 그냥 네이티브 코드에서 수정해주도록 합시다.

 

android/app/src/main/AndroidManifest.xml 추가해 주세요.

 

 

추가했다면 저장 Andorid 프로젝트는 종료하고 다시 Flutter 프로젝트로 돌아와 주시면 됩니다.

 

기본 프로젝트를 생성하셨다면 main.dart 기본 코드가 생성되었을 텐데

불필요한걸 지우긴 귀찮으실 테니 이렇게 얼른 수정해주세요.

 

main.dart

 

void main() {

  runApp(MyApp());

}

class MyApp extends StatelessWidget {

  @override

  Widget build(BuildContext context) {

    return MaterialApp(

      title: 'Flutter Demo',

      theme: ThemeData(

        primarySwatch: Colors.blue,

        visualDensity: VisualDensity.adaptivePlatformDensity,

      ),

      home: MyHomePage(title: 'Flutter Demo Home Page'),

    );

  }

}

class MyHomePage extends StatefulWidget {

  MyHomePage({Key key, this.title}) : super(key: key);

   final String title;

   @override

  _MyHomePageState createState() => _MyHomePageState();

}



class _MyHomePageState extends State<MyHomePage> {

  void _startscan() {

    setState(() {});

  }

   @override

  Widget build(BuildContext context) {

    return Scaffold(

      appBar: AppBar(

        title: Text(widget.title),

      ),

      body: Center(

        child: Column(

          mainAxisAlignment: MainAxisAlignment.center,

          children: <Widget>[],

        ),

      ),

      floatingActionButton: FloatingActionButton(

        onPressed: _startscan,

        tooltip: 'Increment',

        child: Icon(Icons.bluetooth),

      ), // This trailing comma makes auto-formatting nicer for build methods.

    );

  }

}

 

 

이렇게 수정하셨다면 이제 한번 블루투스 검색을 만들어 봅시다.

 

일단 Bluetooth instance 생성해야 합니다.

instance 앱이 시작할때 생성하기 위해선

FlutterBlue flutterBlue;

class _MyHomePageState extends State<MyHomePage> {

   @override

  void initState() {

    // TODO: implement initState

    super.initState();

//ble instance 생성

    flutterBlue = FlutterBlue.instance;

   }

 

initState 메소드를 생성해 주세요. 이후 안에 instance 생성하시면 됩니다.

 

그러고 보니 처음 프로젝트 생성시 만들었던 FloatingActionButton 하단에 있네요

버튼을 사용해서 블루투스 검색을 시작해 보겠습니다.

일단 처음 만들어 놓았던 startscan method 안에 코드를 구현해 주세요

 

  void _startscan() {

// 검색 시작 -> 검색 시간 4초

   flutterBlue.startScan(timeout: Duration(seconds: 4));



// 해당되는 ScanResult 는 Print 합니다.

    var subscription = flutterBlue.scanResults.listen((results) {

      // do something with scan results

      for (ScanResult r in results) {

        print('Device Name : ${r.device.name} // Device ID : ${r.device.id} // Device rssi: ${r.rssi}');

      }

    });

  }

 

실행 후에 검색을 시작해 보니

제대로 검색이 되는 것을 확인하실 수 있습니다. 

 

감사합니다.

728x90