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

标签 xamarin

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

问题:

a)如果我想开发这样的应用程序,平台之间将/可以共享什么东西。 (将不胜感激具有可能类的结构设计)

b) 使用 Timer 或 AlarmManager 更好吗?

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

提前致谢。

最佳答案

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

a) 通常,您可以在平台之间共享任何非平台特定的东西。

我倾向于使用对由接口(interface)定义的 View 进行引用的演示者或调解者。例如,如果我有一个登录 View ,我会让我的 iOS UIViewController 和我的 Android Activity 都实现一个 ILoginView 接口(interface)。该接口(interface)将定义以下内容:

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

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

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

    长话短说,接口(interface)是你的 friend ,尤其是当你将它们与某种依赖注入(inject)系统结合时。

    b) 如果您希望您的用户在设备处于 sleep 模式或处于另一个应用程序时收到警报提示,我会使用 AlarmManager for Android 和 LocalNotification for iOS。

    c) 您可以将 PCL 与 Xamarin.Android 和 Xamarin.iOS 一起使用。问题是 PCL 还没有得到 100% 的支持。但是,您可以对开发环境进行一些调整,希望能将您带到您想要的位置:
  • 在Xamarin Studio中切换到Beta或Alpha channel :“Xamarin Studio”->“检查更新”->在弹出的对话框左上角的组合框中更改 channel ->选择“重启并安装更新” 。”这将让您让 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 工作。我发现这值得额外的工作,因为我现在可以在 XS 中创建一个单元测试项目,将其链接到 PCL 并从 IDE 中运行测试。此外,我可以使用像 Moq 这样的库来模拟我的 View 并进行集成测试。

    Xamarin promise 将“很快”提供完整的 PCL 支持,我们不必为这些黑客行为而烦恼。

    关于Xamarin:简单的跨平台报警应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15618349/

    相关文章:

    xamarin - SonarQube 扫描仪适用于 macOS 上的 MSBuild,使用 mono

    ios - 以前工作的 Xamarin iOS 项目无法构建并出现 MSB6006 错误

    c# - 如何独立使用 Xamarin Profiler 来分析应用程序

    c# - 如何使用 C++ 非托管库在 Visual Studio 2017 中为 Xamarin.Forms 设置项目?

    android - 使用 Xamarin 的 Paypal REST API

    android - 如何获取 Xamarin.Android 的 Mono VM 的堆快照?

    c# - 如何在 Xamarin for Android 中使用 OpenTK 将 OpenGL 渲染获取为位图?

    Xamarin::Android - 此处定义的原始属性

    ios - iOS map 中的引脚在玩 map 后相互交换图像(Xamarin)

    c# - Xamarin Forms - WebViewSource 显示空白页