MAUI クロスプラットフォームポッドキャストアプリケーション(Conf 2021)

MAUI クロスプラットフォームポッドキャストアプリケーション(Conf 2021)

モバイルとデスクトップ:iOS、Android、macOS、Windows向けのネイティブ.NET MAUIアプリケーション

最終更新 2021/12/03 12:27
微信公众号【痕迹gg CodeShare】
読了目安 3 分
カテゴリ
MAUI
タグ
.NET C# MAUI オープンソース オープンソースMAUI

紹介

.NET Conf 2021 において、マイクロソフトは .NET6 に基づくクロスプラットフォームアプリケーションを披露しました。ASP.NET Core、Blazor、.NET MAUI、マイクロサービスなどの機能を備えています。 ASP.NET Core と Blazor を搭載した .NET Podcasts アプリの動作バージョンをお試しください:https://dotnetpodcasts.azurewebsites.net/

プロジェクト体系

モバイルとデスクトップ:iOS、Android、macOS、Windows 向けのネイティブ .NET MAUI アプリケーション

  • Web:Blazor WebAssembly アプリケーションと ASP.NET Core Blazor ウェブサイト
  • API:ASP.NET Core Web API、インジェストワーカー、ポッドキャスト更新ワーカー
  • Blazor ハイブリッドアプリケーション:.NET MAUI と Blazor のハイブリッドアプリケーションのサンプル

MAUI プロジェクト

単一のコードベースで複数プラットフォームに対応するプロジェクトソリューション。Android、iOS、macOS、Windows 向けのネイティブ .NET アプリケーションです。ソリューションは以下の通りです。

機能紹介

  • Global Usings

グローバル参照:任意の using 文の前に Global キーワードを追加するだけで、その参照がグローバルになります。

global using Microsoft.Maui;
  • 組み込みテーマ

UserAppTheme を使用して、プラットフォームに応じたテーマ設定(Light/Dark)を変更できます。

switch (Settings.Theme)
{
    default:
    case OSAppTheme.Light:
        App.Current.UserAppTheme = OSAppTheme.Light;
        break;
    case OSAppTheme.Dark:
        App.Current.UserAppTheme = OSAppTheme.Dark;
        break;
}
  • メッセージセンター

mvvmlight の Messenger に似た機能で、Subscribe/Send/Unsubscribe を使って購読、発行、購読解除が行えます。

// 購読
MessagingCenter.Instance.Subscribe<string>("","",async (sender) =>
				{
		                    //...
				});

// 購読解除
MessagingCenter.Instance.Unsubscribe<string>("", "");

// 発行
MessagingCenter.Instance.Send<string>("", "");
  • 組み込みコンテナ

MAUI で提供される統一的な登録およびコンテナサービス。MauiAppBuilder を使用してカスタムサービスを追加し、MauiWinUIApplication から対応するサービスを取得できます。

// サービスの登録
public static MauiAppBuilder ConfigureServices(this MauiAppBuilder builder)
{
    builder.Services.TryAddSingleton<PlayerService>();
}

// プラットフォームのコンテナサービスの呼び出し
public static class ServicesProvider
{
    public static TService GetService<TService>()
        => Current.GetService<TService>();

    public static IServiceProvider Current
        =>
#if WINDOWS10_0_17763_0_OR_GREATER
        MauiWinUIApplication.Current.Services;
#elif ANDROID
        MauiApplication.Current.Services;
#elif IOS || MACCATALYST
        MauiUIApplicationDelegate.Current.Services;
#else
        null;
#endif
}

統一リソース管理

MAUI では、フォント、アイコン、スタイル、ローカルリソースファイルなどのリソース管理とアクセスが統一されています。

フォントへのアクセス

<Setter Property="FontFamily" Value="SegoeUiSemibold" />

画像リソースへのアクセス

<image Source="xxx.png" />

ローカライズリソース

xmlns:res="clr-namespace:Microsoft.NetConf2021.Maui.Resources.Strings"

<label Text="{x:Static res:AppResource.Categories}" />

プラットフォーム化

XAML やコード内で、OnPlatform や OnIdiom を使用して、プラットフォームやデバイスタイプに応じて異なる UI やビジネスロジックを処理できます。

異なるプラットフォームでのフォント設定

<label FontSize="{OnPlatform UWP=24, macOS=24, Android=14,iOS=14}" />

異なるデバイスでの設定

<GridItemsLayout Span="{OnIdiom Phone=2, Tablet=3, Desktop=3}" />

Essentials

組み込みの Essentials は、ネイティブのネットワーク WIFI、Bluetooth などへのアクセスを提供します。

// ネットワーク接続の確認
var current = Connectivity.NetworkAccess;
if (current != NetworkAccess.Internet)
{
    //...
}

// WIFI 接続の有無を確認
var profiles = Connectivity.ConnectionProfiles;
var hasWifi = profiles.Contains(ConnectionProfile.WiFi);

if (hasWifi)
{
    //...
}

ハイブリッドモード

XAML 内で BlazorWebView を使用します。

xmlns:b="clr-namespace:Microsoft.AspNetCore.Components.WebView.Maui;assembly=Microsoft.AspNetCore.Components.WebView.Maui"

<b:BlazorWebView
  x:Name="MyWebView"
  Margin="10,0"
  HostPage="wwwroot/index.html"
  BackgroundColor="{AppThemeBinding Light={StaticResource Grey1}, Dark={StaticResource Grey9}}"
>
  <b:BlazorWebView.RootComponents>
    <b:RootComponent
      Selector="app"
      ComponentType="{x:Type pages:ListenTogetherComponent}"
    />
  </b:BlazorWebView.RootComponents>
</b:BlazorWebView>

まとめ

プロジェクトは GitHub で公開されています。https://github.com/microsoft/dotnet-podcasts で、ソースコードからさらなる機能をご確認いただけます。

さらに探索

関連読書

その他の記事
同じカテゴリ / 同じタグ 2023/01/12

Maui Blazor でカメラ機能を実装する方法

Maui Blazor ではインターフェースが WebView でレンダリングされるため、Android のカメラを使用する際に画面コンポーネントにバインドする必要があるため、カメラを取得できません。

続きを読む