Monotouch 区分 iPad 3G 和 WiFi(检查 GPS)

Posted

技术标签:

【中文标题】Monotouch 区分 iPad 3G 和 WiFi(检查 GPS)【英文标题】:Monotouch Tell Difference Between iPad 3G and WiFi (Check for GPS) 【发布时间】:2012-01-19 14:22:17 【问题描述】:

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

所以我用来区分第一代 iPad 型号的代码使用以下代码检查是否存在 GPS 功能:

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

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

【问题讨论】:

【参考方案1】:

奇怪的是,这两种型号都在设备代码 iPad1,1 下(iPad 2s 有三个不同的代码 iPad2,1 iPad2,2 和 iPad2,3,可以让您分辨出区别)。

是的,在下载更新时,第一代 iPad 始终只有一个二进制文件。

因此,我用来区分 iPad 第一代机型的代码使用以下代码检查 GPS 功能是否存在:

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

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

如果您想使用它(例如,非 AppStore 应用程序),那么您应该能够使用以下方法 p/invoke 到函数中:

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);

更新 检测 GPS 的唯一(对 AppStore 有效)方法似乎是使用定位服务并查询其准确性。见:How can I tell if an ios device has a GPS?

【讨论】:

太棒了,谢谢。我知道这是一个私有框架,但迄今为止我已在四个 App Store 发布的应用程序中成功使用它,没有任何问题。我不建议其他人使用它,因为我知道它可能永远无法通过下一次批准,但在此之前它可以很好地满足我的需求!再次感谢。奥利 请注意,使用dlopendlsymdlclose可能会在 Apple 工具中隐藏符号(这使您可以通过 AppStore 检查)。 YMMV :) 有趣!你认为情况可能是这样吗?不要以为你能想出另一种方法来区分 3G 和 WiFi(没有这个框架?) 我用替代/链接更新了我的答案。它的优点是告诉您 GPS 当前是否可用(不仅仅是可用),这可能更有用(至少对于某些应用程序而言)。

以上是关于Monotouch 区分 iPad 3G 和 WiFi(检查 GPS)的主要内容,如果未能解决你的问题,请参考以下文章

Monotouch - 在 monotouch 项目中附加 Sqlite 数据库并部署到 iPad

Monotouch - 带有 iPad 应用的 UIImagePickerController

Monotouch - UIActionSheet 无法在 iPad 上正确显示

monotouch 在横向模式和纵向模式下旋转

如何使用 Monotouch 在 iPad 故事板应用程序中以编程方式管理视图

适用于 iPad 的 monotouch Ad Hoc Distribution