我目前有一些客观的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的新手,我不确定如何移植它。有没有人有关于如何移植这个(或任何其他方式来区分)的指示?
答案 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?