- 打开本地音乐:“open”
- 播放:“start”
- 暂停:“pause”
- 获取总时长:“getDuration”
上述接口都由Flutter app发起调用,需要MethodChannel
实现。此外,插件还需要上报播放器状态和播放时长,上报这类事件由EventChannel
实现。
需求搞清楚了,那我们就开始开发这个插件吧。
开发
首先在Android Studio里新建一个Flutter Plugin工程: File > New > New Flutter Project… 在弹出的对话框里选择 “Flutter Plugin”
然后一路 "Next"下去。完成后的工程结构如下:
整个工程包含4个主目录,android和ios目录下是对应Native代码。lib目录下是插件的Flutter端代码。example目录下是个完整的Flutter App。这个App示范怎么使用你开发的Flutter插件。在本例中,example在手机上跑起来就是上面那个播放器的样子。
插件Native端
照例我们先来看看Native端怎么做,在android目录下,IDE会为你生成一个XXXPlugin.java的文件。打开打开以后可以看到下面这样的示例代码:
/** FlutterMusicPlugin /
public class FlutterMusicPlugin implements MethodCallHandler {
/* Plugin registration. */
public static void registerWith(Registrar registrar) {
final FlutterMusicPlugin plugin = new FlutterMusicPlugin();
final MethodChannel channel = new MethodChannel(registrar.messenger(), “flutter_music_plugin”);
channel.setMethodCallHandler(plugin);
}
@Override
public void onMethodCall(MethodCall call, Result result) {
// TODO implement method call handler
}
}
里面有一个实现了MethodCallHandler
的类FlutterPlugin
和一个静态函数registerWith
。在这个静态函数里,new了一个MethodChannel
,然后把FlutterPlugin的实例设置给了这个MehodChannel。换句话说,你的插件里的那些个MethodChannel
,EventChannel
都是通过这个函数注册到Host App的。这样Flutter端在调用的时候才能找到对应的channel。接下来我们要做的就是重写onMethodCall
这个函数,把之前定义好的媒体播放的API在这里做路由:
@Override
public void onMethodCall(MethodCall call, Result result) {