Monotouch различает iPad 3G и WiFi (проверьте GPS) - PullRequest
1 голос
/ 19 января 2012

В настоящее время у меня есть некоторый объективный код 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 Ответ

1 голос
/ 19 января 2012

Как ни странно, обе модели поставляются под кодом устройства iPad1,1 (iPad 2s имеет три разных кода iPad2,1, iPad2,2 и iPad2,3, что позволяет отличить их).

Да, при загрузке обновлений всегда есть один двоичный файл для iPad первого поколения.

Так что код, который я использую для определения различий между моделями iPad 1st Gen, проверяет наличие функций GPS с помощьюследующий код:

Be предупредил , что вышеуказанный код ObjectiveC, скорее всего, будет отклонен Apple, если вы хотите, чтобы ваше приложение было доступно в AppStore.Это потому, что функция, которую вы рассматриваете, является частью приватной платформы.

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

Если вы хотите использовать это (например, приложение не из AppStore), то вы должны иметь возможностьдля p / вызова функции, используя:

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

ОБНОВЛЕНИЕ Кажется, единственный (действительный для AppStore) способ обнаружить GPS - это использовать службы определения местоположения и запросить их точность.См .: Как узнать, есть ли на устройстве iOS GPS?

...