// 上报播放器的状态的EventChannel
EventChannel status_channel = new EventChannel(registrar.messenger(), “flutter_music_plugin.event.status”);
status_channel.setStreamHandler(new EventChannel.StreamHandler() {
@Override
public void onListen(Object o, EventChannel.EventSink eventSink) {
// 把eventSink存起来
plugin.setStateSink(eventSink);
}
@Override
public void onCancel(Object o) {
}
});
//上报播放进度的EventChannel
EventChannel position_channel = new EventChannel(registrar.messenger(), “flutter_music_plugin.event.position”);
position_channel.setStreamHandler(new EventChannel.StreamHandler() {
@Override
public void onListen(Object o, EventChannel.EventSink eventSink) {
// 把eventSink存起来
plugin.setPositionSink(eventSink);
}
@Override
public void onCancel(Object o) {
}
});
}
注册完以后我们就拿到了两个EventSink
,当需要的时候就可以用需要的EventSink
给Flutter App上报事件了。
Native这边还有一环是打开本地音频文件的操作,这里我偷个懒,用发送Intent
的方式来让用户在第三方app中选择音频文件。如果是在Activity中我会用startActivityForResult
和onActivityResult
来获取音频文件,可是我们现在开发的是一个插件,不是Activity怎么办?
回想一下我们用来注册插件的静态函数registerWith
,入参的类型是Registrar
。看看它里面都有啥?
public interface Registrar {
//返回 Host app的Activity
Activity activity();
//返回 Application Context.
Context context();
//返回 活动Context
Context activeContext();
//返回 BinaryMessenger 主要用来注册Platform channels
BinaryMessenger messenger();
//返回 TextureRegistry,从里面可以拿到SurfaceTexture
TextureRegistry textures();
//返回 当前Host app创建的FlutterView
FlutterView view();
//返回Asset对应的文件路径
String lookupKeyForAsset(String var1);
//返回Asset对应的文件路径
String lookupKeyForAsset(String var1, String var2);
//插件对外发布