【问题标题】:How to create cross platform xamarin library which uses phone's GPS module?如何创建使用手机 GPS 模块的跨平台 xamarin 库?
【发布时间】:2015-10-03 02:13:46
【问题描述】:
我是一个在 Angular 中开发的初级 JS 程序员,但现在我被分配了这个任务:创建一个访问手机 GPS 模块、陀螺仪和加速度计(可能还有指南针)的库,以收集加速度、位置和一些其他数据。真的不是很多代码。现在,在 C# 中创建库本身已经由一位同事完成,但我需要知道是否有一种方法可以将 Objective-C 和 java 代码也包含到库中,这将是分别适用于 ios/droid 的平台特定代码。
结果必须是单个 dll 文件,并且必须在 xamarin 中可用。甚至要求图书馆使用角度,我不知道是否可能。如果可以的话,这将是一个奖励。
我们有哪些选择来实现这一目标?
【问题讨论】:
标签:
xamarin
gps
cross-platform
accelerometer
gyroscope
【解决方案1】:
您需要创建一个针对您想要的所有平台的可移植类库 (PCL)。在这个 PCL 中,您将拥有一个需要在每个平台上实现的接口,使用平台特定的代码。说:
public interface IGps
{
int SomeFunc();
}
每个操作 GPS 信息的代码都将在 PCL 中使用此接口进行操作。
在您要定位的每个平台中,您都需要一个实现此接口并使用依赖注入框架将其注入 PCL 的类。这样,您将使用 PCL 中的特定平台,而无需知道每个平台的实现细节。
public class GPSWindowsPhone : IGPS
{
public int SomeFunc()
{
return 1;
}
}
至于使用每个平台的本机代码,可以使用Obj-C和Java代码的绑定,然后使用实现接口的类作为以本机语言编写的代码的简单包装器。但是,如果您还没有完成任何特定于平台的编码,我建议您已经用 C# 编写它们。
关于 Angular,您可以查看一些 [语言] 到 JS 编译器,但我只是重写它:P