이런 크로스 플랫폼을 개발을 위해 사용하면서 가장 큰 이점은
블루투스 같은 기능을 한번에 구현할 수 있다는 장점이라고 생각합니다.
일단 프로젝트를 하나 생성해 주세요.
저희가 사용하는 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}');
}
});
}
실행 후에 검색을 시작해 보니
제대로 검색이 되는 것을 확인하실 수 있습니다.
감사합니다.
'Flutter' 카테고리의 다른 글
[Flutter] BottomNavigationBar (플러터 바텀네비게이션) 사용 방법 (0) | 2022.02.10 |
---|---|
[Flutter] 2.0 Button(플러터 버튼) 사용방법 (0) | 2022.02.10 |
[Flutter] Bluetooth(플러터 블루투스) flutter_reactive_ble 사용방법 (0) | 2022.02.10 |
Flutter - ListView (플러터 리스트뷰) 사용방법 (0) | 2022.02.03 |
Flutter - AlertDialog(플러터 다이얼로그) (1) | 2020.09.02 |