【问题标题】:MvvmCross plugin for setting up Alarms用于设置警报的 MvvmCross 插件
【发布时间】:2014-01-14 00:59:39
【问题描述】:

我想编写一个跨移动平台应用程序,通过指定日期和时间等所需参数来设置警报。我只想设置一次而不是重复。 我在 mvvmcross 或 Xamarin 中找不到任何现成的插件?

请帮忙

【问题讨论】:

    标签: xamarin mvvmcross


    【解决方案1】:

    由于 MVVMCross 中没有现有的插件,您可能需要编写自己的插件。您可以在此处找到文档:

    https://github.com/MvvmCross/MvvmCross/wiki/MvvmCross-plugins

    因为您想指定一些参数,所以您想查看以下部分:

    https://github.com/MvvmCross/MvvmCross/wiki/MvvmCross-plugins#writing-a-configurable-plugin

    总的来说,这是你可能会做的:

    通用界面

    public interface IAlarm
    {
        void SetupAlarm(); 
    }
    
    public class PluginLoader
        : IMvxPluginLoader
    {
        public static readonly PluginLoader Instance = new PluginLoader();
    
        public void EnsureLoaded()
        {
            var manager = Mvx.Resolve<IMvxPluginManager>();
            manager.EnsurePlatformAdaptionLoaded<PluginLoader>();
        }
    }
    

    Android 实现

    public class DroidAlarmConfiguration 
        : IMvxPluginConfiguration
    {
        public AlarmLength { get; set;}
    }
    
    public class DroidAlarm : IAlarm
    {
        public TimeSpan AlarmLength { get; set; }
    
        public void SetupAlarm()
        {
            //ALARM IMPLEMENTATION HERE. NOTE THIS IS SOME JAVA SYNTAX!!!!
            var globals = Mvx.Resolve<Cirrious.CrossCore.Droid.IMvxAndroidGlobals>();
            var alarm = globals.ApplicationContext
                                  .GetSystemService(Context.ALARM_SERVICE)
                                  as AlarmManager;
    
            Intent intent = new Intent(context, AlarmReceiver.class);
            alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
    
            alarm.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
            alarmLength, alarmIntent);
        }
    }
    
    public class Plugin
        : IMvxPlugin
    {
    private _alarmLength = **Your Value Here**;
    
    public void Configure(IMvxPluginConfiguration configuration)
    {
        if (configuration == null)
            return;
    
        var droidConfiguration = (DroidAlarmConfiguration)configuration;
        _alarmLength = droidConfiguration.AlarmLength;
    }
    
    public void Load()
    {
          var instance = new DroidAlarm();
          instance.AlarmLength = _AlarmLength;
        Mvx.RegisterSingleton<IAlarm>(instance);
    }
    }  
    

    Setup.cs - 在一个核心位置为所有 android/ios/windows 设置值

    protected override IMvxPluginConfiguration GetPluginConfiguration(Type plugin)
    {
        if (plugin == typeof(Yours.Alarm.Droid.Plugin))
        {
            return new Yours.Alarm.Droid.DroidAlarmConfiguration()
            {
                AlarmLength = **YOUR VALUE HERE**
            };
        }
    
        return null;
    }
    

    然后,您将对 iOS 和 Windows Phone 执行相同的 Droid 步骤。我希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2014-07-20
      • 2017-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多