欢迎光临
我们一直在努力

.NET + AI 跨平台实战系列(二):环境搭建与基础——MAUI项目中集成AI的准备工作

90%的代码复用率从这开始:一套基础设施,跑通所有平台

引言:磨刀不误砍柴工

在上一篇文章中,我们规划了智能相册App的技术架构——云端+本地双轨策略,并明确了MAUI作为承载AI能力的跨平台框架。但理想很丰满,现实往往很骨感:当你兴致勃勃准备写代码时,可能卡在第一步——权限配置、API密钥存储、网络层封装,这些“脏活累活”决定了后续开发的顺畅程度。

根据Syncfusion 2026年1月的技术报告,80%的AI集成失败案例源于基础架构设计不当

。权限没配好、密钥硬编码、网络请求无重试,任何一个细节都会让整个应用功亏一篑。

这篇文章的目标很明确:打造一个健壮的AI基础设施,让后续的功能开发只需要关注业务逻辑。我们将完成:

  • MAUI项目创建与平台配置

  • 相册/网络权限的统一处理

  • API密钥的安全存储方案

  • 可复用的HTTP客户端封装

  • 基础的网络连通性测试

  • 一、创建项目与平台配置

    1.1 创建MAUI项目

    打开终端,执行以下命令:

    bash

    dotnet new maui -n SmartPhotoAlbum
    cd SmartPhotoAlbum

    或者使用Visual Studio 2022/2025,选择“.NET MAUI应用”模板,项目名称设为SmartPhotoAlbum。

    项目结构如下:

    text

    SmartPhotoAlbum/
    ├── Platforms/ # 平台特定代码
    ├── Resources/ # 图片、字体等资源
    ├── ViewModels/ # 视图模型(后续创建)
    ├── Views/ # 页面(后续创建)
    ├── Services/ # 服务层(后续创建)
    ├── App.xaml # 应用入口
    └── MauiProgram.cs # 依赖注入配置

    1.2 各平台权限配置

    智能相册需要访问相册和网络,不同平台的配置方式不同。

    Android (Platforms/Android/AndroidManifest.xml)

    xml

    <?xml version=\”1.0\” encoding=\”utf-8\”?>
    <manifest xmlns:android=\”http://schemas.android.com/apk/res/android\”>
    <application android:allowBackup=\”true\” android:icon=\”@mipmap/appicon\” android:roundIcon=\”@mipmap/appicon_round\” android:supportsRtl=\”true\”></application>
    <uses-permission android:name=\”android.permission.READ_EXTERNAL_STORAGE\” />
    <uses-permission android:name=\”android.permission.WRITE_EXTERNAL_STORAGE\” />
    <uses-permission android:name=\”android.permission.INTERNET\” />
    <uses-permission android:name=\”android.permission.ACCESS_NETWORK_STATE\” />
    <!– Android 13+ 需要新的照片权限 –>
    <uses-permission android:name=\”android.permission.READ_MEDIA_IMAGES\” />
    <uses-permission android:name=\”android.permission.READ_MEDIA_VIDEO\” />
    </manifest>

    注意:Android 13(API 33)及以上版本使用READ_MEDIA_IMAGES替代READ_EXTERNAL_STORAGE。MAUI的权限API会自动处理版本差异,但清单文件仍需声明。

    iOS (Platforms/iOS/Info.plist)

    在Info.plist中添加以下键值对:

    xml

    <key>NSPhotoLibraryUsageDescription</key>
    <string>我们需要访问您的相册以识别照片内容</string>
    <key>NSCameraUsageDescription</key>
    <string>用于拍摄新照片进行识别</string>
    <key>NSPhotoLibraryAddUsageDescription</key>
    <string>需要保存识别结果到相册</string>

    关键:iOS缺少任何描述字符串都会导致应用崩溃,务必检查

    Windows (Package.appxmanifest)

    打开Package.appxmanifest,在“功能”选项卡中勾选:

    • Internet(客户端)

    • ⁠⁠图片库

    二、权限管理的统一封装

    MAUI提供了Permissions类来处理运行时权限,但直接在每个页面调用会导致代码重复。我们封装一个权限服务。

    2.1 创建权限服务接口

    在Services文件夹下创建IPermissionService.cs:

    csharp

    namespace SmartPhotoAlbum.Services;

    public interface IPermissionService
    {
    Task<PermissionStatus> CheckAndRequestAsync<TPermission>() where TPermission : Permissions.BasePermission, new();
    Task<bool> EnsureStoragePermissionAsync();
    Task ShowPermissionDeniedAlertAsync(string permissionName);
    }

    2.2 实现权限服务

    创建PermissionService.cs:

    csharp

    using Microsoft.Maui.ApplicationModel;
    using Microsoft.Maui.Storage;

    namespace SmartPhotoAlbum.Services;

    public class PermissionService : IPermissionService
    {
    public async Task<PermissionStatus> CheckAndRequestAsync<TPermission>()
    where TPermission : Permissions.BasePermission, new()
    {
    var status = await Permissions.CheckStatusAsync<TPermission>();

    赞(0)
    未经允许不得转载:171主机测评 » .NET + AI 跨平台实战系列(二):环境搭建与基础——MAUI项目中集成AI的准备工作
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址