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 を開く、マップを開く、アクセス許可の処理、バージョン追跡などのアプリ機能
  • コミュニケーション:連絡先、メール、ネットワーク、電話ダイヤラー、SMS メッセージ、Web 認証へのアクセス
  • デバイス機能:バッテリー、ディスプレイ情報、デバイス情報、センサー、ライト、ジオコーディング、位置情報、触覚フィードバック、振動の情報とアクセス
  • メディア: メディア ピッカー、スクリーンショット、テキスト読み上げ、ユニット コンバーターなど
  • 共有:クリップボードへのアクセス、他のアプリケーションへのファイルやテキストの共有など
  • ストレージ:ファイルの選択、ファイル システム ヘルパー、基本設定、およびセキュリティで保護されたストレージのための API

アプリケーションがデバイス上でインターネット アクセスが利用可能かどうかを検出する必要がある場合は、Microsoft.Maui.NetworkingConnectivity API を使用できます。

var accessType = Connectivity.Current.NetworkAccess;
if (accessType is NetworkAccess.Internet)
{
    // Connection to internet is available
}

プラットフォーム API にアクセスする

.NET MAUI のプラットフォーム固有を使用すると、特定のプラットフォームでのみ利用可能な特定の機能を使用できます。 詳細については、「Android プラットフォーム固有設定」、「iOS プラットフォーム固有設定」、および「Windows プラットフォーム固有設定」を参照してください。

特定のプラットフォーム API にアクセスするための API が .NET MAUI によって提供されていない場合は、必要なプラットフォーム 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 フォルダー内のファイルは組み込まれません。 この方法では、1 つのプロジェクトから複数のプラットフォームをターゲットにするための複数バージョン対応と呼ばれる機能が使用されます。 複数バージョン対応を部分クラスおよび部分メソッドと組み合わせて、クロスプラットフォーム コードからプラットフォーム機能を呼び出すことができます。

次の演習では、.NET API と .NET MAUI API の組み合わせを使用して、todo リストを保存して読み込みます。