[iOS] iPhone에서 GPS 하드웨어 감지
SDK를 사용하여이를 확인할 수는 없지만 현재 모델에 대한 지식을 활용할 수 있습니다. iPhone 3G, iPhone 3GS 및 iPod Touch 2 세대로 제한하는 경우 (개인적으로 이전 iPhone edge 또는 iPod Touch 1 세대를 지원하지 않습니다), iPhone 모델에는 실제 AGPS 장치가 함께 제공되고 iPod Touch 2 세대는 세대는-가능하다면-지오 태깅 된 와이파이 핫스팟을 사용할 수 있습니다. 그런 다음 다음 방법을 사용하여 실행중인 모델을 확인할 수 있습니다.
- (NSString *) deviceModel{
size_t size;
sysctlbyname("hw.machine", NULL, &size, NULL, 0);
char *answer = malloc(size);
sysctlbyname("hw.machine", answer, &size, NULL, 0);
NSString *results = [NSString stringWithCString:answer encoding: NSUTF8StringEncoding];
free(answer);
return results;
}
이 메서드는 3GS의 경우 @ "iPhone2,1", 3G의 경우 @ "iPhone1,2", ipod touch 2 세대의 경우 @ "iPod2,1"을 반환합니다. 당신은 그것을 다음과 같이 부릅니다
NSString *deviceModel = [[self deviceModel] retain];
다음과 같이 사용하십시오.
if([self.deviceModel isEqualToString:@"Pod2,1"]){
// no real GPS unit available
// no camera available
...
}
-------------------적어도 공식 SDK를 통해서는 하드웨어를 감지 할 수 없습니다 . 그러나 애플리케이션에서 (CoreLocation 프레임 워크를 통해) 상호 작용 (즉, 정보 가져 오기) 할 수 있습니다. 그리고 이것은 iPhone OS 2.0이 출시 된 이후 출시 된 모든 기기에서 작동합니다 (실제 GPS가 내장되지 않은 iPod touch에도 적용됨).
-------------------GPS가 있는지 여부를 알기 위해 GPS 권한을 요청하지 않으려면 약간의 트릭을 사용합니다. 실제 GPS가있는 모든 장치에도 3G가 있으므로 장치에 전화 교환 원이 있는지 확인합니다.
//Use classLoaders to avoid crashes on iPhone OS 3.x
id netInfo = [[NSClassFromString(@"CTTelephonyNetworkInfo") alloc] init];
if (netInfo)
{
id carrier = [netInfo subscriberCellularProvider];
if ([[carrier carrierName] length] <=0)
{
//NO operator=>NO 3G and no real GPS
}
}
[netInfo release];
물론 이것은 100 % 미래의 증거는 아니지만이 시점에서 잘 작동합니다. GPS 추정치를 숨기기 위해 Battery HD 앱에서 사용하므로 사용자에게 이에 대한 승인을 요청하고 싶지 않습니다.
-------------------내가 찾은 가장 좋은 점 CLLocation.verticalAccuracy
은 GPS가 장착 된 장치에만 설정된 사실을 활용하는 것 입니다. 물론 이것은 GPS 가용성이 첫 번째 위치 업데이트 이후에만 결정될 수 있음을 의미합니다.
Apple의 문서에서 :
수직 정확도를 결정하려면 GPS 기능이있는 장치가 필요합니다. 따라서 일부 이전 iOS 기반 장치에서이 속성은 항상 음수 값을 포함합니다.
업데이트 : 때때로 Core Location은 iPhone 4에서도 verticalAccuracy = -1 인 CLLocation 객체를 보냅니다. 아마도 GPS 수정을 사용할 수없고 Core Location이 셀 또는 Wi-Fi 포지셔닝에 의존 할 때 그렇게 할 것입니다. 따라서 -1이라는 사실이 반드시 GPS가 없다는 것을 의미하지는 않습니다. 확실히 알고있는 양의 값을 얻는 경우에만 GPS가 있습니다.
출처
https://stackoverflow.com/questions/2005920