Перенос Xamarin.Essentials кода в .NET для Android и .NET для приложений iOS
Xamarin.Essentials является основной библиотекой почти для каждого приложения Xamarin, и ее функциональные возможности теперь являются частью пользовательского интерфейса мультиплатформенных приложений .NET (.NET MAUI).
Ниже описан процесс использования .NET MAUIсобственных функций устройства, ранее известных как Xamarin.Essentials.NET для Android или .NET для приложения iOS:
- Xamarin.Essentials Удалите пакет NuGet из приложения .NET для Android или .NET для iOS.
- Задайте для свойства
true
сборки$(UseMauiEssentials)
значение в файле проекта. Дополнительные сведения см. в разделе "Изменение файла проекта". - Инициализировать функциональные возможности "essentials" путем вызова
Platform.Init
метода. Дополнительные сведения см. в разделе "Инициализация платформы". - При необходимости выполните дополнительную настройку. Дополнительные сведения см. в разделе "Выполнение дополнительной настройки".
- Добавьте директивы using для необходимых функций. Дополнительные сведения см. в разделе "Добавление директив using".
Внимание
Никакие действия не требуются для использования Xamarin.Essentials в приложении, кроме удаления ссылок на Xamarin.Essentials
пространство имен, так как .NET MAUI уже включает функции изXamarin.Essentials.NET MAUI.
Изменение файла проекта
Чтобы использовать .NET MAUIсобственные функции устройств в приложении .NET для Android или .NET для iOS, измените файл проекта и задайте $(UseMauiEssentials)
для свойства сборки значение true
.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0-android</TargetFramework>
...
<UseMauiEssentials>true</UseMauiEssentials>
</PropertyGroup>
</Project>
Инициализация платформы
В любом Activity запущенном методе необходимо вызвать Platform.Init
метод, который находится в Microsoft.Maui.ApplicationModel пространстве имен из 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();
Чтобы обрабатывать запросы разрешений среды выполнения, переопределите OnRequestPermissionsResult
метод в каждом Activity и вызовите 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();
Состояния действия:
- Создание
- Возобновлено
- Приостановлен
- Уничтожаются
- SaveInstanceState
- Запуск
- Остановлено
Добавьте директивы using.
Неявные global using
директивы для .NET для iOS и .NET для Android не включают пространства имен для .NET MAUIсобственных функций устройств. using
Поэтому директивы пространства имен должны быть заменены using
директивами для Xamarin.Essentials
пространства имен, содержащего необходимые функциональные возможности:
Пространство имен | Характер использования |
---|---|
Microsoft.Maui.ApplicationModel | Функции модели приложений, включая действия приложения, разрешения и отслеживание версий. |
Microsoft.Maui.ApplicationModel.Communication | Функции коммуникации, включая контакты, электронную почту и сеть. |
Microsoft.Maui.Devices | Функциональные возможности устройств, включая батарею, датчики, фонарик и хаптичную обратную связь. |
Microsoft.Maui.Media | Функции мультимедиа, включая выбор мультимедиа и текст в речь. |
Microsoft.Maui.ApplicationModel.DataTransfer | Совместное использование функций, включая буфер обмена и общий доступ к файлам. |
Microsoft.Maui.Storage | служба хранилища функциональные возможности, включая выбор файлов и безопасное хранилище. |
Дополнительные сведения о функциональных возможностях в каждом пространстве имен см. в разделе "Интеграция платформы".