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.Networking
の Connectivity
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 リストを保存して読み込みます。