Xamarin:简单的跨平台报警应用

Sau*_*ran 11 xamarin

目标:使用Xamarin工作室开发跨平台移动应用程序,在特定日期和时间显示消息.

问题:

a)如果我想开发这样的应用程序,平台之间将会/可以共享什么.(结构设计可能会有类别)

b)使用Timer或AlarmManager更好吗?

c)应该为共享核心项目(可移植类库/平台特定库/普通C#项目)创建什么类型的项目?

提前致谢.

Ben*_*hop 18

在过去的几周里,我一直专注于如何在Android和iOS之间分享最佳代码,以下是根据我的经验提出的建议:

a)通常,您可以在非平台特定的平台之间共享任何内容.

我倾向于使用包含对由界面定义的视图的引用的演示者或调解器.例如,如果我有一个登录视图,我会让我的iOS UIViewController和我的Android Activity都实现一个ILoginView接口.此接口将具有以下定义:

  • 用户名和密码的getters
  • 一个名为LoginSubmitted的事件
  • 两种方法ShowLoginFailed和GoNextScreen

演示者/调解员将负责监听正在提交的登录,获取用户名/密码,并将这些内容传递给服务调用或命令.每当调解器收到命令/服务的结果时,它就会负责调用ShowLoginFailed或GoNextScreen.

我还使用接口来定义我的SQLite管理器(https://github.com/praeclarum/sqlite-net/tree/master/src),或者是负责进行实际Web API服务调用的委托.我发现我必须这样做,因为SQLite管理器和RestSharp需要进行一些特定于平台的编译.

简而言之,接口是你的朋友,特别是当你将它们与某种依赖注入系统耦合时.

b)如果您希望用户在设备处于睡眠模式或其他应用程序时收到警报提示,我会使用适用于Android的AlarmManager和适用于iOS的LocalNotification.

c)您可以使用Xamarin.Android和Xamarin.iOS来使用PCL.问题是PCL尚未100%支持.但是,您可以对您的开发环境进行一些调整,希望能够让您到达您想要的位置:

  • 切换到Xamarin Studio中的Beta或Alpha通道:"Xamarin Studio" - >"检查更新" - >更改弹出的对话框左上角组合框中的通道 - >选择"重新启动并安装更新" ".这将使您可以让Android和iOS项目在同一解决方案中链接到相同的PCL.

  • 更新XS后,关闭XS并按照本文中的说明修改Mono安装,以便PCL正确编译:MonoDevelop:是否可以切换PCL的编译器?

  • 要使代码提示在PCL项目中更好地运行,您需要从Mono安装中获取mscorlib.dll并将其放在项目目录的DLLs文件夹中,并在PCL项目中添加对它的引用.你可以在这里找到dll:/Library/Frameworks/Mono.framework/Versions/3.0.10/lib/mono/4.0

一旦你完成了所有这些,你应该处于良好状态,让你的PCL工作.我发现这是值得的额外工作,因为我现在可以在XS中创建一个单元测试项目,将其链接到PCL并在IDE中运行测试.另外,我可以使用像Moq这样的库来模拟我的视图并进行集成测试.

Xamarin承诺,"很快"将提供完整的PCL支持,我们不必为这些黑客而烦恼.