抚顺市建设局网站,企业所得税怎么合理节税,如何彻底清除网站的网页木马,成都网站seo服务接上篇#xff1a;Flutter3引用原生播放器-IOS(Swift)篇
安卓端原生播放器的接入思路与ios基本一致#xff0c;所以本篇就不废话了#xff0c;直接上代码#xff1a;
创建插件VideoViewPlugin实现FlutterPlugin#xff1a;
package io.flutter.plugins.videoplayer;imp…接上篇Flutter3引用原生播放器-IOS(Swift)篇
安卓端原生播放器的接入思路与ios基本一致所以本篇就不废话了直接上代码
创建插件VideoViewPlugin实现FlutterPlugin
package io.flutter.plugins.videoplayer;import android.util.Log;import androidx.annotation.NonNull;import io.flutter.embedding.engine.plugins.FlutterPlugin;
import io.flutter.embedding.engine.plugins.activity.ActivityAware;
import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding;public class VideoViewPlugin implements FlutterPlugin, ActivityAware {private final static String TAG VideoViewPlugin;FlutterPluginBinding fpBinding;Overridepublic void onAttachedToEngine(NonNull FlutterPluginBinding binding) {fpBinding binding;Log.e(TAG, onAttachedToEngine);}Overridepublic void onDetachedFromEngine(NonNull FlutterPluginBinding binding) {Log.e(TAG, onDetachedFromEngine);}Overridepublic void onAttachedToActivity(NonNull ActivityPluginBinding apBinding) {fpBinding.getPlatformViewRegistry().registerViewFactory(plugins.my_video_player/view, new VideoViewFactory(fpBinding, apBinding));Log.e(TAG, onAttachedToActivity);}Overridepublic void onDetachedFromActivityForConfigChanges() {Log.e(TAG, onDetachedFromActivityForConfigChanges);}Overridepublic void onReattachedToActivityForConfigChanges(NonNull ActivityPluginBinding binding) {Log.e(TAG, onReattachedToActivityForConfigChanges);}Overridepublic void onDetachedFromActivity() {Log.e(TAG, onDetachedFromActivity);}
}
由于引用视频播放器时需要用到Activity的context所以实现了ActivityAware接口在onAttachedToActivity方法中注册PlatformViewFactory
创建VideoViewFactory实现PlatformViewFactory
package io.flutter.plugins.videoplayer;import android.content.Context;import io.flutter.Log;
import io.flutter.embedding.engine.plugins.FlutterPlugin;
import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding;
import io.flutter.plugin.common.StandardMessageCodec;
import io.flutter.plugin.platform.PlatformView;
import io.flutter.plugin.platform.PlatformViewFactory;public class VideoViewFactory extends PlatformViewFactory {private final static String TAG VideoViewFactory;private final FlutterPlugin.FlutterPluginBinding fpBinding;private final ActivityPluginBinding apBinding;public VideoViewFactory(FlutterPlugin.FlutterPluginBinding fpBinding, ActivityPluginBinding apBinding) {super(StandardMessageCodec.INSTANCE);Log.e(TAG, VideoViewFactory);this.fpBinding fpBinding;this.apBinding apBinding;}Overridepublic PlatformView create(Context context, int viewId, Object args) {Log.e(TAG, PlatformView-create: args.toString());return new VideoViewPlayer(args.toString(), fpBinding, apBinding);}}创建VideoViewPlayer实现PlatformView和MethodChannel.MethodCallHandler
package io.flutter.plugins.videoplayer;import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;import androidx.annotation.NonNull;
import androidx.annotation.Nullable;import com.th.kjjl_flutter.R;
import com.videoplayer.player.VideoView;import io.flutter.embedding.engine.plugins.FlutterPlugin;
import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugin.platform.PlatformView;public class VideoViewPlayer implements PlatformView, MethodChannel.MethodCallHandler {private final static String TAG VideoPlayerView;Activity context;private VideoView videoView;private MethodChannel methodChannel;VideoViewPlayer(String viewId, FlutterPlugin.FlutterPluginBinding fpBinding, ActivityPluginBinding apBinding) {this.context apBinding.getActivity();videoView (VideoView) LayoutInflater.from(context).inflate(R.layout.video_player, null);methodChannel new MethodChannel(fpBinding.getBinaryMessenger(), my_video_player_ viewId);methodChannel.setMethodCallHandler(this);}Overridepublic void onMethodCall(NonNull MethodCall call, NonNull MethodChannel.Result result) {Log.e(TAG, call.method call.method);switch (call.method) {case setUrl:String url call.arguments.toString();videoView.initVideoController(context);videoView.setUrl(url);break;case start:videoView.start();break;case pause:videoView.pause();break;case release:videoView.pause();videoView.release();break;case stopFullScreen:videoView.stopFullScreen();break;default:result.notImplemented();}}NullableOverridepublic View getView() {return videoView;}Overridepublic void dispose() {Log.e(TAG, dispose);videoView.pause();videoView.release();methodChannel.setMethodCallHandler(null);methodChannel null;}}
其中的VideoView即引用的第三方播放器库你可以根据自己情况使用常见的安卓端开源播放器如GSY饺子DKPlayer等
video_player.xml
?xml version1.0 encodingutf-8?
com.videoplayer.player.VideoView xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:idid/videoViewandroid:layout_widthmatch_parentandroid:layout_heightmatch_parent /在MainActivity中注册插件
class MainActivity : FlutterActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)flutterEngine!!.plugins.add(VideoViewPlugin())}
}注意不要在GeneratedPluginRegistrant中去注册插件包括IOS这个类由系统自动生成其它第三方插件注册代码安卓端在MainActivity中注册IOS端在AppDelegate中注册
flutter中的引用以及通信方法上一篇已经写了本篇就不再重复了需要注意的是插件名插件idmethodChannel等安卓IOS和Flutter三端一定要一致