2014-01-13 52 views
0

我想写一个跨移动平台应用程序,通过指定所需的参数(如日期和时间)来设置警报。我只想设置一次而不是重复。 我无法在mvvmcross或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 /窗口设置在一个核心位置值

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步骤。我希望这有帮助!