【发布时间】:2014-01-14 00:59:39
【问题描述】:
我想编写一个跨移动平台应用程序,通过指定日期和时间等所需参数来设置警报。我只想设置一次而不是重复。 我在 mvvmcross 或 Xamarin 中找不到任何现成的插件?
请帮忙
【问题讨论】:
我想编写一个跨移动平台应用程序,通过指定日期和时间等所需参数来设置警报。我只想设置一次而不是重复。 我在 mvvmcross 或 Xamarin 中找不到任何现成的插件?
请帮忙
【问题讨论】:
由于 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 步骤。我希望这会有所帮助!
【讨论】: