2014-01-13 96 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步驟。我希望這有幫助!