
Flutter Method Channel์ ๋ํด์ ์์๋ณด๊ณ , ๊ฐ๋จํ ๋ฐฐํฐ๋ฆฌ ์ถ๋ ฅ ์์ ๋ก ๋ค์ดํฐ๋ธ์์ ํ์ฌ ๋ฐฐํฐ๋ฆฌ ์ํ๋ฅผ ๋ฐ์์ ํ๋ฉด์ ์ถ๋ ฅํด๋ณด๊ฒ ์ต๋๋ค.

๋ค์ดํฐ๋ธ์์ ํ์ฌ ๋ฐฐํฐ๋ฆฌ ์ํ๋ฅผ ๋ฐ์์ ํ๋ฉด์ ์ถ๋ ฅ
Flutter์์ Method Channel ์ค์
main.dart
import 'package:flutter/services.dart';
...
static const platform = MethodChannel('com.example.test_flutter');
๋ค์ดํฐ๋ธ์์ Method Channel ์ค์ , ๋ฉ์๋ ์์ฑ
MainActivity.kt
private val CHANNEL = "com.example.test_flutter"
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine)
// Method Channel ๋ฑ๋ก
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { call, result ->
if (call.method == "getBatteryLevel") {
val batteryLevel = getBatteryLevel() // ๋ฐฐํฐ๋ฆฌ ์์ค ์ป๊ธฐ
if (batteryLevel != -1) {
result.success(batteryLevel)
} else {
result.error("UNAVAILABLE", "Battery level not available.", null)
}
} else {
result.notImplemented()
}
}
}
private fun getBatteryLevel(): Int {
var batteryLevel = -1
val batteryManager = getSystemService(Context.BATTERY_SERVICE) as BatteryManager
batteryLevel = batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY)
return batteryLevel
}
๋ค์ดํฐ๋ธ ๋ฉ์๋ ํธ์ถ
main.dart
// ๋ค์ดํฐ๋ธ ๋ฉ์๋ ํธ์ถ
Future<String> getBatteryLevel() async {
try {
// ์์์ ์์ฑํ ์ฑ๋์ ์ธ์คํด์ค๋ฅผ ํตํด invokeMethod ๋ฉ์๋๋ฅผ ํธ์ถ
// ์ด๋, ํ๋ผ๋ฏธํฐ๋ก ํธ์ถํ ๋ฉ์๋์ ์ด๋ฆ์ ์
๋ ฅ
final int result = await platform.invokeMethod('getBatteryLevel');
return '๋ฐฐํฐ๋ฆฌ: $result%';
} on PlatformException catch (e) {
return '์คํจ: ${e.message}';
}
}

import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
Widget build(BuildContext context) {
return MaterialApp(
home: MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
const MyHomePage({Key? key}) : super(key: key);
// Method Channel ์์ฑ
static const platform = MethodChannel('com.example.test_flutter');
// ๋ค์ดํฐ๋ธ ๋ฉ์๋ ํธ์ถ
Future<String> getBatteryLevel() async {
try {
// ์์์ ์์ฑํ ์ฑ๋์ ์ธ์คํด์ค๋ฅผ ํตํด invokeMethod ๋ฉ์๋๋ฅผ ํธ์ถ
// ์ด๋, ํ๋ผ๋ฏธํฐ๋ก ํธ์ถํ ๋ฉ์๋์ ์ด๋ฆ์ ์
๋ ฅ
final int result = await platform.invokeMethod('getBatteryLevel');
return '๋ฐฐํฐ๋ฆฌ: $result%';
} on PlatformException catch (e) {
return '์คํจ: ${e.message}';
}
}
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Method Channel Test"),
),
body: Center(
child: FutureBuilder(
future: getBatteryLevel(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return Text(snapshot.data!);
}
return CircularProgressIndicator();
},
),
),
);
}
}package com.example.test_flutter
import android.content.Context
import android.os.BatteryManager
import android.os.Build
import androidx.annotation.RequiresApi
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugins.GeneratedPluginRegistrant
class MainActivity: FlutterActivity() {
private val CHANNEL = "com.example.test_flutter"
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine)
// Method Channel ๋ฑ๋ก
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { call, result ->
if (call.method == "getBatteryLevel") {
val batteryLevel = getBatteryLevel() // ๋ฐฐํฐ๋ฆฌ ์์ค ์ป๊ธฐ
if (batteryLevel != -1) {
result.success(batteryLevel)
} else {
result.error("UNAVAILABLE", "Battery level not available.", null)
}
} else {
result.notImplemented()
}
}
}
private fun getBatteryLevel(): Int {
var batteryLevel = -1
val batteryManager = getSystemService(Context.BATTERY_SERVICE) as BatteryManager
batteryLevel = batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY)
return batteryLevel
}
}(android studio ๊ธฐ์ค)
android > app > main > kotlin > ํ๋ก์ ํธ ํจํค์ง๋ช
> MainActivity.kt ํ์ผ๋ก ๋ค์ด๊ฐ๋ฉด ๋นจ๊ฐ์ค ๋ฒ๋ฒ
File > open > ํ์ฌ ์์
ํ๋ ํ๋ก์ ํธ > android ๋ก android ํด๋๋ฅผ ์ ์ฐฝ์ ์ด์ด์ kotlin ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๋นจ๊ฐ์ค ์๋ณด์
๋๋ค