Xamarin:简单的跨平台闹钟应用程序

11
目标:使用Xamarin Studio开发跨平台移动应用程序,在特定日期和时间显示一条消息。
问题:
a)如果我想开发这样的应用程序,哪些东西可以/应该在平台之间共享?(欢迎提供具有可能的类的结构设计)
b)是使用计时器还是AlarmManager更好?
c)什么类型的项目应该为Shared Core Project创建(Portable Class Library / Platform Specific Library / Plain C# Project)?
谢谢提前。
4个回答

18

我最近几周一直在专注于如何在Android和iOS之间最好地共享代码,以下是基于我的经验提出的建议:

a) 一般来说,您可以在平台之间共享任何不属于特定平台的内容。

我倾向于使用持有对由接口定义的视图引用的Presenter或Mediator。例如,如果我有一个Login View,我会让我的iOS UIViewController和Android Activity都实现ILoginView接口,该接口将定义以下内容:

  • 用户名和密码的获取器
  • 名为LoginSubmitted的事件
  • 两个方法ShowLoginFailed和GoNextScreen

Presenter/Mediator将负责侦听提交的登录请求,获取用户名/密码,并将这些内容传递给服务调用或命令。每当Mediator收到命令/服务的结果时,它就要负责调用ShowLoginFailed或GoNextScreen。

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

长话短说,接口是您的朋友,特别是当与某种依赖注入系统结合使用时。

b) 如果您希望在设备处于睡眠模式或者用户在另一个应用中时,通过提醒用户来实现某些功能,则应在Android上使用AlarmManager,在iOS上使用LocalNotification。

c) 您可以在Xamarin.Android和Xamarin.iOS中使用PCLs。问题在于PCLs尚未完全支持。不过,您可以进行一些调整以满足需求:

  • 在 Xamarin Studio 中切换到 Beta 或 Alpha 频道: "Xamarin Studio" -> "Check for Updates" -> 更改弹出对话框左上角下拉列表中的频道 -> 选择 "Restart and Install Updates." 这将使您的 Android 和 iOS 项目能够链接到同一解决方案中相同 PCL。

  • 更新 XS 后,关闭 XS 并按照此帖子中的说明修改您的 Mono 安装,以便 PCL 正确编译:MonoDevelop: is it possible to switch PCL's compiler?

  • 要使代码提示在 PCL 项目内更加流畅,您需要从 Mono 安装中获取 mscorlib.dll,并将其放置在项目目录中的 DLLs 文件夹中,并在 PCL 项目中添加对其的引用。您可以在此处找到 dll:/Library/Frameworks/Mono.framework/Versions/3.0.10/lib/mono/4.0

完成所有这些步骤后,您的 PCL 应该可以正常工作了。我发现这样做是值得额外努力的,因为我现在可以创建一个 Unit Test 项目在 XS 中将其链接到 PCL 并从 IDE 中运行测试。此外,我还可以使用像 Moq 这样的库来模拟我的视图并进行集成测试。

Xamarin 承诺全面的 PCL 支持即将到来,我们将不必再使用这些 hack。


研究Xamarin - 我喜欢你使用接口的想法。非常有帮助。 - YnotDraw
非常棒的信息。感谢您的发布。 - Stonetip
如果您想编写一个可以在所有平台上运行的应用程序,Xamarin是唯一的选择吗?iOS、Android、Firefox OS - user3491862

2

我知道这是一篇旧文章,但现在想要做到这一点的任何人都应该看一下今年早些时候推出的Xamarin.Forms,它是一组真正跨平台的控件,因此您只需创建一个UI即可。


2
Xamarin目前可以帮助您共享业务逻辑,例如数据库、Web服务或任何与平台无关的代码。您可以使用C#编写代码,从而可以访问基本的C#功能或者更准确地说是Mono特定的功能。
总之,您可以创建一个用于后端工作的独立项目,以及一个用于UI和其代码的独立项目(两者显然在同一工作空间中)。然后,您可以在iOS应用程序、Android应用程序以及默认情况下在WP8应用程序(甚至Mac和Windows应用程序)中使用这种中心核心后端项目。因此,除了核心之外,您需要额外努力分别为所有平台编写UI、处理程序和代码。

1
Xamarin现在推出了Xamarin.Forms,它抽象了UI的创建过程,并使得使用相同的代码库为Android、iOS和WinPhone创建UI成为可能(xamarin.com/forms)。因此,不需要为每个平台重新编写UI。 - HischT

1

请查看来自 Xamarin 团队的指南以开始: http://docs.xamarin.com/guides/cross-platform/application_fundamentals/building_cross_platform_applications

这是第四部分,解答了您在第 C 部分中提出的问题。 http://docs.xamarin.com/guides/cross-platform/application_fundamentals/building_cross_platform_applications/part_4_-_platform_divergence_abstraction_divergent_implementation

此外,Xamarin Studio 仪表板/主屏幕(?)右侧有两个应用程序可供下载,完全适用于 2-3 个平台,因此您可以查看他们在项目之间共享代码时如何构建应用程序。

他们的网站上还有很多指南和教程,阅读和练习不需要太多时间。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接