.NET MAUI安卓使用腾讯X5WebView教程
效果视频:
0/0
继续观看
.NET MAUI安卓使用腾讯X5WebView教程
教程:
1.使用Visual Studio 2022 Preview创建MAUI项目
2.通过Manage NuGet Packages功能搜索nuget包或使用以下命令安装腾讯X5浏览内核
Install-Package XamarinLibrary.Xamarin.Android.Tencent.Tbs.Tbssdk.Sdk -Version 44181.0.0
nuget包会被直接识别安装到对应平台,比如当前Nuget包为安卓平台使用,安装完成后可以在Dependencies→net6.0-android→Packages找到刚刚安装完成的nuget包
3.直接在App.cs中进行预初始化腾讯x5内核,注意这里使用了#if ANDROID的预编译指令,如果不涉及安卓以外的其他平台,连预编译指令也不需要
public partial class App : Application
{
public App()
{
InitializeComponent();
// 在调用TBS初始化、创建WebView之前进行如下配置
var dic = new System.Collections.Generic.Dictionary<string, Java.Lang.Object>
{
{ TbsCoreSettings.TbsSettingsUseSpeedyClassloader, true },
{ TbsCoreSettings.TbsSettingsUseDexloaderService, true },
};
QbSdk.InitTbsSettings(dic);
MainPage = new AppShell();
}
}
4.同样的,调用x5内核的接口,也只需要在MainPage.cs调用即可,比如调用x5内核的视频播放功能接口,这里就没有使用#if ANDROID的预编译指令
private void VideoBtn_Clicked(object sender, EventArgs e)
{
var mainActivity = (Platform.CurrentActivity as MainActivity);
TbsVideo.OpenVideo(mainActivity, "http://vfx.mtime.cn/Video/2019/02/04/mp4/190204084208765161.mp4");
}
5.与Xamarin.Forms不同的是,MAUI除了可以兼容原本的Renderer外,还引入了新的Handler,当我们去打开示例源码中的TencentWebViewHandler.cs文件查看时,会发现构造函数必须传入实现IPropertyMapper接口的对象
public static PropertyMapper Mapper = new PropertyMapper<TencentWebView>();
public TencentWebViewHandler() : base(Mapper)
{
}
再打开MauiProgram.cs查看x5浏览器Handler的配置
.ConfigureMauiHandlers(handlers =>
{
handlers.AddHandler(typeof(TencentWebView), typeof(TencentWebViewHandler));
});
这里其实就是做的对象初始化,但是构造时规定不能传参数,看回Handler中会看到无参构造函数,但是Handler的父类却需要有参的构造函数,所以这里需要传入静态的PropertyMapper,而这个PropertyMapper其实是在做跨平台开发中很方便的传参方式,如果参考微软的示例项目代码,或者等微软发布对应的开发文档后就能看到它的作用,这里主要为怎么演示腾讯的WebView,所以没有做出PropertyMapper的使用示例。
总结
MAUI的到来,可以令开发者,尤其是习惯了WinForm及WPF开发模式的开发者可以做原本就想做的事情:直接在表现层写业务代码。
当我们看回示例代码的Android Platform,会发现除了Manifest和Manifest所涉及的xml文件需要修改,以上的x5内核代码完全不需要写到Android Platform中。
如果我们对比回原来的Xamarin.Forms的做法,若我们需要同样的做上面的事情,首先需要在Xamarin.Android层安装x5内核的nuget,然后在这层调用原生对应的接口,再者有必要的话,用Pub/Sub模型的MessagingCenter来触发跨层级的事件触发。
而当MAUI打破了Xamarin.Forms的这个开发模式后,我想怎么好好组织,整理多平台上的代码混用,如以上代码那样,除了#if ANDROID外还有其他的平台的预编译带来的业务逻辑代码,及所创建的多个文件目录结构带来的可读性问题才是需要好好考虑的问题了。
示例代码:
https://github.com/jingliancui/XamarinFormsTencentX5Sample