Платформозависимость на Xamarin
Теги: Xamarin, Android, iOS, C#, Платформозависимость
Реализация нотификаций на разных платформах:
Здесь нам на помощь приходит DependencyService. Как обычно в кросс-платформенной разработке, нужно объявить интерфейс в общем проекте и реализовать его в платформо-зависимых проектах. Единственным вопросом будет «как определить, какую реализацию вызвать в каждом конкретном случае?». И тут за работу берется DependencyService, магический деятель фреймворка Xamarin. В зависимости от того, для какой платформы мы собираем проект, DependencyService подставляет необходимую реализацию вместо интерфейса. Также стоит отметить, что для того чтобы эта магия заработала, нужно использовать аннотацию Xamarin.Forms.Dependency:
Например, интерфейс нотификаций, объявленный в общем проекте Xamarin Forms выглядит так:
1
2
3
4
5
6
7
namespace MedChestAssistant
{
public interface INotificationHelper
{
void notify(String message);
}
}
А платформо-зависимая реализация в Android-проекте выглядит так:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[assembly: Xamarin.Forms.Dependency (typeof (NotificationHelperImpl))]
namespace MedChestAssistant.iOS
{
public class NotificationHelperImpl: INotificationHelper
{
#region INotificationHelper implementation
public void notify (string message)
{
var notification = new UILocalNotification();
// set the fire date (the date time in which it will fire)
notification.FireDate = NSDate.FromTimeIntervalSinceNow(5);
// configure the alert
notification.AlertAction = "Medical Chest Reminder";
notification.AlertBody = "Lyrica will expire in 2 days. Don't forget renew it";
// modify the badge
notification.ApplicationIconBadgeNumber = 1;
// set the sound to be the default sound
notification.SoundName = UILocalNotification.DefaultSoundName;
// schedule it
UIApplication.SharedApplication.ScheduleLocalNotification(notification);
}
#endregion
public NotificationHelperImpl ()
{
}
}
}