在C# MAUI应用开发中,跨平台框架本身已经封装了大量通用功能,但部分场景需要调用Android和iOS的原生API才能实现,比如获取设备的电池状态、调用系统通知栏、操作平台特有的硬件模块等。这时候就需要编写平台特定代码,在共享代码中根据当前运行的平台调用对应的原生实现。

MAUI平台特定代码的基础实现方式
MAUI提供了OperatingSystem类和条件编译指令两种方式来区分不同平台,开发者可以根据需求选择合适的方式编写平台特定逻辑。
使用OperatingSystem类判断平台
这种方式可以在运行时动态判断当前运行的平台,适合需要根据平台执行不同逻辑的场景,不需要分平台编译代码。
// 判断当前运行的平台
if (OperatingSystem.IsAndroid())
{
// 执行Android平台特定逻辑
Console.WriteLine("当前运行在Android平台");
}
else if (OperatingSystem.IsIOS())
{
// 执行iOS平台特定逻辑
Console.WriteLine("当前运行在iOS平台");
}
使用条件编译指令
条件编译指令会在编译阶段就根据目标平台保留对应代码,适合平台差异较大的场景,不同平台的代码不会同时编译到最终包中。
#if ANDROID
// 仅Android平台编译的代码
Console.WriteLine("Android平台编译代码");
#elif IOS
// 仅iOS平台编译的代码
Console.WriteLine("iOS平台编译代码");
#endif
调用Android原生API的步骤
MAUI项目中Android平台的原生代码可以放在Platforms/Android目录下,调用原生API的核心是通过MAUI提供的平台上下文获取Android的原生对象。
获取Android平台上下文
在MAUI中可以通过Platform.CurrentActivity获取当前的Android Activity实例,这是调用很多Android原生API的基础。
// 获取Android当前Activity Android.App.Activity activity = Platform.CurrentActivity;
调用Android原生API示例:获取设备型号
下面示例演示如何调用Android原生的Build类获取设备型号信息。
#if ANDROID
using Android.OS;
#endif
public string GetAndroidDeviceModel()
{
#if ANDROID
// 调用Android原生Build类的Model属性获取设备型号
return Build.Model;
#else
return "非Android平台";
#endif
}
调用iOS原生API的步骤
iOS平台的原生代码可以放在Platforms/iOS目录下,调用iOS原生API需要引入对应的iOS原生框架,MAUI已经默认引用了常用的iOS框架。
调用iOS原生API示例:获取设备系统版本
下面示例演示如何调用iOS原生的UIDevice类获取当前系统的版本号。
#if IOS
using UIKit;
#endif
public string GetIOSystemVersion()
{
#if IOS
// 调用iOS原生UIDevice类的SystemVersion属性
return UIDevice.CurrentDevice.SystemVersion;
#else
return "非iOS平台";
#endif
}
封装平台特定代码为共享接口
为了让共享代码更整洁,通常会把平台特定逻辑封装成一个接口,不同平台实现接口的具体方法,共享代码只需要调用接口即可,不需要关心平台差异。
定义共享接口
public interface IDeviceService
{
// 获取设备名称的接口方法
string GetDeviceName();
}
Android平台实现接口
在Platforms/Android目录下创建接口实现类。
#if ANDROID
using Android.OS;
using Microsoft.Maui.Controls;
namespace YourApp.Platforms.Android
{
public class DeviceService : IDeviceService
{
public string GetDeviceName()
{
// 调用Android原生API获取设备名称
return Build.Model;
}
}
}
#endif
iOS平台实现接口
在Platforms/iOS目录下创建接口实现类。
#if IOS
using UIKit;
using Microsoft.Maui.Controls;
namespace YourApp.Platforms.iOS
{
public class DeviceService : IDeviceService
{
public string GetDeviceName()
{
// 调用iOS原生API获取设备名称
return UIDevice.CurrentDevice.Name;
}
}
}
#endif
在共享代码中调用接口
通过依赖注入的方式获取接口实例,调用对应方法即可。
// 在页面中通过依赖注入获取IDeviceService实例
public partial class MainPage : ContentPage
{
private readonly IDeviceService _deviceService;
public MainPage(IDeviceService deviceService)
{
InitializeComponent();
_deviceService = deviceService;
// 调用接口方法获取设备名称
string deviceName = _deviceService.GetDeviceName();
Console.WriteLine($"设备名称:{deviceName}");
}
}
注意事项
- 调用原生API时需要注意权限问题,比如调用相机、存储等敏感功能需要在对应平台的配置文件中添加权限声明。
- 不同平台的API差异较大,编写代码前需要先查阅对应平台的官方API文档,确认方法的使用方式和参数要求。
- 条件编译的代码块中如果使用了平台特有的类型,需要确保在对应平台下才会编译,避免出现编译错误。
C#_MAUIAndroid原生APIiOS原生API平台特定代码修改时间:2026-07-15 11:09:31