Monotouch告诉iPad 3G和WiFi的区别(检查GPS)

时间:2012-01-19 14:22:18

标签: c# objective-c mono xamarin.ios gps

我目前有一些客观的C代码,用于识别iPad 3G和iPad WiFi之间的区别。奇怪的是这两个型号都在设备代码iPad1,1下(iPad 2s有三个不同的代码iPad2,1 iPad2,2和iPad2,3,可以让你分辨出来。)

因此,我使用的代码告诉iPad 1st Gen型号之间的区别,使用以下代码检查是否存在GPS功能:

void *libHandle = dlopen(GRAPHICS_SERVICES_PATH, RTLD_LAZY);
int (*GSSystemHasCapability)(NSString *);
GSSystemHasCapability = dlsym(libHandle, "GSSystemHasCapability");
BOOL result = GSSystemHasCapability(@"gps");
dlclose(libHandle);

作为Monotouch的新手,我不确定如何移植它。有没有人有关于如何移植这个(或任何其他方式来区分)的指示?

1 个答案:

答案 0 :(得分:1)

  

这两款型号的设备代码都是iPad1,1(iPad 2s有三种不同的代码:iPad2,1 iPad2,2和iPad2,3,可以让你分辨出来。)

是的,下载更新时,第一代iPad总会有一个二进制文件。

  

因此,我使用的代码告诉iPad 1st Gen型号之间的区别,使用以下代码检查是否存在GPS功能:

警告如果您希望您的应用程序在AppStore中可用,则Apple可能会拒绝上述ObjectiveC代码。这是因为您正在查看的功能是私有框架的一部分。

#define GRAPHICS_SERVICES_PATH  "/System/Library/PrivateFrameworks/GraphicsServices.framework/GraphicsServices"

如果你想使用它(例如非AppStore应用程序),那么你应该能够使用以下命令调用函数:

using System.Runtime.InteropServices;

...

[DllImport ("/System/Library/PrivateFrameworks/GraphicsServices.framework/GraphicsServices")]
static extern bool GSSystemHasCapability (IntPtr value);

...

bool HasGPS ()
{
    using (NSString gps = new NSString ("gps"))
        return GSSystemHasCapability (gps.Handle);
}

UPDATE 似乎唯一(对AppStore有效)检测GPS的方法是使用位置服务并查询其准确性。请参阅:How can I tell if an iOS device has a GPS?