次の方法で共有


.NET for Android および .NET for iOS アプリで Xamarin.Essentials コードを移行する

Xamarin.Essentials はほぼすべての Xamarin アプリの基本的なライブラリであり、その機能は .NET マルチプラットフォーム アプリ UI (.NET MAUI) の一部になりました。

次の手順では、.NET for Android または .NET for iOS アプリで、.NET MAUI のネイティブ デバイス機能 (旧称 Xamarin.Essentials) を使用するプロセスの概略を示します。

  1. .NET for Android または .NET for iOS アプリから Xamarin.Essentials NuGet パッケージを削除します。
  2. プロジェクト ファイルで $(UseMauiEssentials) ビルド プロパティを true に設定します。 詳細については、「プロジェクト ファイルを変更する」をご覧ください。
  3. Platform.Init メソッドを呼び出して、「Essentials」機能を初期化します。 詳しくは、「プラットフォームを初期化する」をご覧ください。
  4. 必要に応じて、追加のセットアップを実行します。 詳細については、「追加のセットアップを実行する」をご覧ください。
  5. 必要な機能に using ディレクティブを追加します。 詳細については、「using ディレクティブを追加する」をご覧ください。

重要

Xamarin.Essentials 名前空間への参照を削除する以外に、.NET MAUI アプリで Xamarin.Essentials を使用するための操作は必要ありません。.NET MAUI には既に Xamarin.Essentials の機能が含まれているためです。

プロジェクト ファイルを変更する

.NET for Android または .NET for iOS アプリで .NET MAUI のネイティブ デバイス機能を使用するには、プロジェクト ファイルを変更し、$(UseMauiEssentials) ビルド プロパティを true に設定します。

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net8.0-android</TargetFramework>
    ...
    <UseMauiEssentials>true</UseMauiEssentials>
  </PropertyGroup>
</Project>

プラットフォームを初期化する

起動された Activity では、Microsoft.Maui.ApplicationModel 名前空間にある Platform.Init メソッドを OnCreate メソッドから呼び出す必要があります。

using Android.Content.PM;
using Android.Runtime;
using Microsoft.Maui.ApplicationModel;

namespace MyAndroidApp;

[Activity(Label = "@string/app_name", MainLauncher = true)]
public class MainActivity : Activity
{
    protected override async void OnCreate(Bundle? savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        Platform.Init(this, savedInstanceState);
        // ...
    }
}

Platform.Init メソッドには、Application 引数、または Activity 引数と Bundle 引数が必要です。

追加のセットアップを実行する

静的 Platform クラスには、プラットフォーム固有のヘルパーが含まれています。

メンバー 目的
ActivityStateChanged アクティビティの状態が変化したときに発生するイベント。
AppContext 現在のアプリ コンテキストを表す Context オブジェクトを取得するプロパティ。
CurrentActivity 現在のアクティビティを表す現在の Activity オブジェクトを取得するプロパティ。
Intent ActionAppAction 文字列を含む静的クラス。これは、アプリ アクションで使用される Intent の識別子です。
OnNewIntent アプリ アクションを呼び出すときに、アクティビティのオーバーライドされたメソッドから Intent を渡します。
OnResume アプリ アクションの呼び出しの一環として Activity が再開されたときに、アクティビティのオーバーライドされたメソッドから Activity を渡します。
OnRequestPermissionsResult 内部アクセス許可要求を処理するために、アクティビティのオーバーライドされたメソッドからアクセス許可要求の結果を渡します。
WaitForActivityAsync Activity が作成されるかアクティブになるのを待ちます。

実行中のアプリの現在の Context または Activity にアクセスするには、以下を実行します。

var context = Platform.AppContext;

// Current Activity or null if not initialized or not started.
var activity = Platform.CurrentActivity;

Activity が必要であるものの、アプリがまだ完全に起動していない状況では、WaitForActivityAsync メソッドを呼び出します。

var activity = await Platform.WaitForActivityAsync();

ランタイム アクセス許可要求を処理するには、すべての ActivityOnRequestPermissionsResult メソッドをオーバーライドし、そこから Platform.OnRequestPermissionsResult メソッドを呼び出します。

public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults)
{
    Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
    base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}

現在の Activity を取得するだけでなく、ライフサイクル イベントに登録することもできます。

protected override void OnCreate(Bundle bundle)
{
    base.OnCreate(bundle);
    Platform.Init(this, bundle);
    Platform.ActivityStateChanged += Platform_ActivityStateChanged;
}

protected override void OnDestroy()
{
    base.OnDestroy();
    Platform.ActivityStateChanged -= Platform_ActivityStateChanged;
}

void Platform_ActivityStateChanged(object sender, ActivityStateChangedEventArgs e) =>
    Toast.MakeText(this, e.State.ToString(), ToastLength.Short).Show();

アクティビティの状態は次のとおりです。

  • 作成
  • Resumed
  • Paused
  • Destroyed
  • SaveInstanceState
  • Started
  • Stopped

using ディレクティブを追加する

.NET for iOS および .NET for Android の暗黙的な global using ディレクティブには、.NET MAUI のネイティブ デバイス機能の名前空間は含まれていません。 したがって、Xamarin.Essentials 名前空間の using ディレクティブは、必要な機能を含む名前空間の using ディレクティブに置き換える必要があります。

名前空間 目的
Microsoft.Maui.ApplicationModel アプリのアクション、アクセス許可、バージョン追跡などのアプリケーション モデル機能。
Microsoft.Maui.ApplicationModel.Communication 連絡先、メール、ネットワークなどの通信機能。
Microsoft.Maui.Devices バッテリ、センサー、フラッシュライト、触覚フィードバックなどのデバイス機能。
Microsoft.Maui.Media メディアの選択、テキスト読み上げなどのメディア機能。
Microsoft.Maui.ApplicationModel.DataTransfer クリップボードやファイル共有などの共有機能。
Microsoft.Maui.Storage ファイルの選択、セキュリティで保護されたストレージなどのストレージ機能。

各名前空間の機能の詳細については、「プラットフォーム統合」をご覧ください。