访问 Blazor Hybrid 中的平台功能
我们正在使用 .NET 生成混合应用,这意味着我们有权访问所有 .NET 类库。 除了这些 API 之外,使用 .NET MAUI 生成 Blazor Hybrid 应用使你不仅能够部署到多个平台,还可以实现对每个平台的本机 API 的访问。 也就是说,如果你需要集成 iOS、Android、macOS 或 Windows 的平台功能,可以使用 C# 完成这一切。 可以直接从 Blazor 组件访问这些 API,也可以创建共享的 .NET MAUI 类库。
平台集成
.NET MAUI 支持的每个平台都提供了可通过 C# 访问的唯一操作系统和平台 API。 .NET MAUI 提供跨平台 API 来访问此平台的大部分功能,其中包括访问传感器、访问运行应用的设备的相关信息、检查网络连接、安全地存储数据,以及启动基于浏览器的身份验证流。
.NET MAUI 将这些跨平台 API 分为不同的功能领域:
- 应用模型:应用功能,包括应用操作、应用程序信息、打开浏览器、打开 URI、打开地图、处理权限和版本跟踪
- 通信:访问联系人、电子邮件、网络、电话拨号程序、短信和 Web 身份验证
- 设备功能:信息和访问电池、显示信息、设备信息、传感器、手电筒、地理编码、地理位置、触觉反馈和振动
- 媒体:包括媒体选取器、屏幕截图、文本转语音和单位转换器
- 共享:包括对剪贴板的访问,以及将文件或文本共享到其他应用程序
- 存储:用于选取文件、文件系统帮助程序、首选项和安全存储的 API
如果应用程序需要检测设备上是否有 Internet 接入,它可以使用 Microsoft.Maui.Networking
中的 Connectivity
API:
var accessType = Connectivity.Current.NetworkAccess;
if (accessType is NetworkAccess.Internet)
{
// Connection to internet is available
}
访问平台 API
.NET MAUI 的平台特定功能让你可以使用仅在特定平台上提供的特定功能。 有关详细信息,请参考 Android 平台特定信息、iOS 平台特定信息和 Windows 平台特定信息。
在 .NET MAUI 不提供任何 API 用于访问特定平台 API 的情况下,你可以自行编写代码来访问所需的平台 API。 有关详细信息,请参考调用平台代码。
你可以通过使用条件编译从跨平台代码中调用平台代码,从而面向不同的平台。
以下示例展示了 DeviceOrientation
枚举,它可用于指定设备方向:
namespace InvokePlatformCodeDemos.Services
{
public enum DeviceOrientation
{
Undefined,
Landscape,
Portrait
}
}
检索设备方向需要编写平台代码。 可以通过编写一个使用条件编译的方法来实现这一目标,从而面向不同的平台:
#if ANDROID
using Android.Content;
using Android.Views;
using Android.Runtime;
#elif IOS
using UIKit;
#endif
using InvokePlatformCodeDemos.Services;
namespace InvokePlatformCodeDemos.Services.ConditionalCompilation
{
public class DeviceOrientationService
{
public DeviceOrientation GetOrientation()
{
#if ANDROID
IWindowManager windowManager = Android.App.Application.Context.GetSystemService(Context.WindowService).JavaCast<IWindowManager>();
SurfaceOrientation orientation = windowManager.DefaultDisplay.Rotation;
bool isLandscape = orientation == SurfaceOrientation.Rotation90 || orientation == SurfaceOrientation.Rotation270;
return isLandscape ? DeviceOrientation.Landscape : DeviceOrientation.Portrait;
#elif IOS
UIInterfaceOrientation orientation = UIApplication.SharedApplication.StatusBarOrientation;
bool isPortrait = orientation == UIInterfaceOrientation.Portrait || orientation == UIInterfaceOrientation.PortraitUpsideDown;
return isPortrait ? DeviceOrientation.Portrait : DeviceOrientation.Landscape;
#else
return DeviceOrientation.Undefined;
#endif
}
}
}
.NET MAUI 应用项目包含一个 Platforms 文件夹,其中每个子文件夹表示一个 .NET MAUI 可以面向的平台。 每个目标平台文件夹包含在该平台上启动应用的特定于平台的代码,以及你添加的任何其他平台代码。 在生成时,生成系统仅包含为该特定平台生成时每个文件夹中的代码。 例如,当你为 Android 构建应用时,“Platforms”>“Android”文件夹中的文件内置于应用包中,但其他 Platforms 文件夹中的文件则不会。 此方法使用了一种称为“多定向”的功能,可使单个项目面向多个平台。 可以将多定向与分部类和分部方法结合使用,通过跨平台代码调用平台功能。
在下一个练习中,我们将结合使用 .NET API 和 .NET MAUI API 来保存和加载待办事项列表。