Я использую детектор ориентации устройства с помощью Xamarin MessagingCenter.Что я хотел бы сделать, так это отправлять сообщения из моего проекта MainActivity в Android в реализацию класса Singleton внутри моего проекта .NET Standart.
Как вы видите, я переопределил метод OnConfigurationChanged (...) "внутри моей MainActivity и все точки останова попадают в мои операторы IF, когда я переключаю ориентацию с альбомной на портретную.Проблема в том, что я новее получаю эти сообщения.Обратный вызов внутри моего «OrientationHelper» называется более новым.
«OrientationHelper» запускается при первой загрузке страницы (для тех, кто скажет, что у меня нет экземпляра :))
MainActivity:
public override void OnConfigurationChanged(Android.Content.Res.Configuration newConfig)
{
base.OnConfigurationChanged(newConfig);
if (newConfig.Orientation == Android.Content.Res.Orientation.Landscape)
MessagingCenter.Send(this, "OrientationContract"
, new OrientationChangedEventArgs(Orientation.Landscape));
else if (newConfig.Orientation == Android.Content.Res.Orientation.Portrait)
MessagingCenter.Send(this, "OrientationContract"
, new OrientationChangedEventArgs(Orientation.Portrait));
}
Класс Singleton, который будет получать сообщения от MainActivity:
public class OrientationHelper
{
private OrientationHelper()
=> MessagingCenter.Subscribe<OrientationChangedEventArgs>(this, "OrientationContract"
, s => DeviceOrientation = s.Orientation);
private static OrientationHelper s_instace;
public static OrientationHelper Instance
{
get
{
if (s_instace == null)
s_instace = new OrientationHelper();
return s_instace;
}
}
private Orientation _deviceOrientation;
public Orientation DeviceOrientation
{
get => _deviceOrientation;
private set
{
if (_deviceOrientation == value)
return;
_deviceOrientation = value;
}
}
}
OrientationChangedEventArgs:
public class OrientationChangedEventArgs : EventArgs
{
public Orientation Orientation { get; private set; }
public OrientationChangedEventArgs(Orientation orientation)
=> Orientation = orientation;
}