本篇有用到混合开发,我不懂原生,粗略带过。。。
本篇使用java作为Android语言,不是Flutter官方的Kotlin
Dart部分
- 创建MethodChannel与Andorid平台建立通信(频道名称可以自定义,但是要与android对应)
/// 创建频道 static const platform = const MethodChannel('samples.flutter.dev/test'); - 使用MethodChannel发出任务
Future<void> _test() async { // 十秒后执行任务,因为我是使用button触发,所以要时间手动关闭屏幕 Timer( Duration(seconds: 10), () async { // 发送频道测试方法 await platform.invokeMethod<String>('test'); }, ); }
Android部分
- 使用android studio以安卓方式打开项目的android目录,等待加载完成
gradle默认使用jcenter仓库下载,如果加载缓慢可以先切换为淘宝镜像
android studio打开项目Gradle Download:https://jcenter加载慢 - 添加权限
<uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.DISABLE_KEYGUARD" /> - 编码(别忘了开始加上你的包名)
import android.os.PowerManager; import androidx.annotation.NonNull; import io.flutter.embedding.android.FlutterActivity; import io.flutter.embedding.engine.FlutterEngine; import io.flutter.plugin.common.MethodChannel; public class MainActivity extends FlutterActivity { // 定义频道名称 private static final String CHANNEL = "samples.flutter.dev/test"; @Override public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) { super.configureFlutterEngine(flutterEngine); new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL) .setMethodCallHandler( (call, result) -> { PowerManager powerManager = (PowerManager) this.getSystemService(POWER_SERVICE); PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP , "test:tag"); wakeLock.acquire(60*1000L); result.success("success"); } ); } }
本文介绍如何使用Flutter的MethodChannel实现Dart与Android平台之间的通信。通过创建MethodChannel并定义频道名称,可以在Dart侧发起调用并在Android侧进行响应处理。
4159

被折叠的 条评论
为什么被折叠?



