2011-10-08 6 views
9

업데이트 : iOS 8 (8.3, 아마)의 일부 버전에서는 비행기 모드 (비행기 모드에서도 GPS 위치 정보를 얻을 수 있음)에서도 GPS 하드웨어를 사용할 수 있습니다. 이것은이 질문을 논리적으로 표현합니다.iPhone에서 비행기 모드가 활성화되어 있는지 확인 하시겠습니까?

- 그것은 아이폰이 비행기 모드에있는 경우 프로그래밍 방식으로 결정할 수

인가? 나는 AirPlane Mode에 있는지를 알고 싶다. 네트워크 연결이 필요 없다. 이 질문은 많이 제기되었지만, 필자가 보았던 모든 대답은 Apple의 Reachability 코드를 참조하여 네트워크 연결이 가능한지 확인했습니다.

iPhone의 GPS를 사용하는 앱을 쓰고 있습니다. 현재 비행기 모드가 켜져 있고 앱이 실행되면 내 위치 관리자 개체가 여전히 존재하는 것처럼 보이고 여전히 캐시 된 위치를 제공하고있는 것으로 보입니다. 상태 표시 줄에 작은 GPS 아이콘이 나타나 내 앱이 위치를 결정하고 있음을 알려줍니다.

Airplane Mode and GPS arrow indicator

나는 비행기 모드에서 휴대 전화의 내가 위치 관리자 객체를 초기화 할 수 없도록 알고 싶어 나는 기능을 GPS를 사용할 수없는 사용자에게 표시하기 위해 내 UI를 변경할 수 있습니다.

GPS 기능은 네트워크 연결에 관계없이 분명히 사용할 수 있으므로 네트워크 연결이 부족하여 비행기 모드의 프록시가 좋지 않습니다. Airplane Mode에서 특정 오류 (locationManager : didFailWithError)를 얻지 못하는 것 같습니다. 여러 소스에서 온 것일 수 있다고 가정합니다.

답변

5

"셀 신호 없음"환경 (원격 지역에서 캠핑)에서 사용되며 사용자가 기기를 비행기 모드로 설정하여 절약 할 수 있음을 미리 알고 있다는 점을 제외하고는 내 앱과 비슷한 요구 사항 배터리를 깨닫지 않고 GPS를 종료합니다.

비행기 모드로 인해 didFailWithError가 발생하지 않고 locationServicesEnabled가 yes를 반환하므로 타이머를 60 초로 설정하고 타이머가 만료되기 전에 GPS 값이 반환되지 않으면 사용자에게 GPS를 알리는 메시지를 표시합니다 데이터를 읽을 수 없으며 비행기 모드가 활성화되어 있지 않은지 확인하고 하늘에 대해 명확한 시각을 확보 할 수 있도록합니다.

+0

감사합니다. 이것이 제가 끝내 준 것입니다. – smacdonald

+0

오류 메시지에서 사용자에게 언급해야 할 다른 사례는 앱에 GPS 데이터에 대한 액세스 권한이 부여되었는지 확인해야한다는 것입니다. 나는 사용자가 응용 프로그램이 고장 났다고 주장했다. 권한 팝업에서 "허용하지 않음"을 눌렀다는 것을 알기 위해서였다. –

+1

사용자가 앱의 위치 서비스를 사용 설정하지 않은 경우'locationManager : didFailWithError :'메소드에 'kCLErrorDenied' 오류 결과가 표시됩니다. 그 사건을 처리하기위한 특정 오류 대화 상자가 있습니다. 기기가 비행 중 모드 인 경우 일반 'kCLErrorLocationUnknown' 오류가 표시됩니다. – smacdonald

3

이 정보를 얻을 수 있는지, 적어도 공용 클래스를 사용하는지는 모르겠지만 항공기 모드에 있음을 사용자에게 알리는 것이므로 제한된 앱 기능으로 사용자가 설정할 수 있습니다 Info.plist 파일을 UIRequiresPersistentWiFi 속성을 "true"로 설정하십시오. 비행기 모드가 설정되면이 메시지가 나타납니다. 그런데이 방법은 시스템이 지원되기 때문에 비행기 모드 상태를 확인하는 것보다 낫습니다. 사용자가 비행기 모드를 활성화 한 후 Wi-Fi를 다시 활성화하는 것처럼 (비행기 모드에서 계속) 시스템 경고가 표시되지 않습니다.

+0

감사합니다. 나는 이미이 일을하고 있지만, 내게는 약간의 퍼지가 될 것 같다. (내 앱은 Wi-Fi 연결은 물론 네트워크 연결이 필요하지 않기 때문에). 나는 또한 배터리 수명에 부정적인 영향을 미친다고 생각한다. 와이파이 연결을 계속 유지하는 것이 나의 이해이기 때문이다. 어쩌면 당신 말이 맞을 것입니다. 아마이 정보를 얻을 방법이 없을 것입니다. – smacdonald

1

하나의 해결책은 take a screenshot of the device 일 수 있으며 해당 지역에있는 색상을 볼 수 있습니다. 오렌지색이라면 비행기 모드입니다.

+3

나는 당신의 횡포를 좋아하지만,이 솔루션은 다른 버전의 iOS 및 어쩌면 다른 하드웨어에서 손상 될 수 있다고 상상합니다. 내가 일할 다른 것을 얻을 수 없다면, 나는 이것을 줄 수도있다. – smacdonald

+0

그래, 확실히 해킹 된 솔루션이야. 내장 API가 훨씬 더 좋습니다. – ceejayoz

+2

장치에서 스크린 샷을 찍으면 상태 표시 줄이 포함되지 않습니다. –

0

비행 모드가 사용 설정되어 있는지 확인하지 않아도됩니다. 애플이 비행기 모드의 작동 방식을 변경 한 경우, 전원을 켰을 때도 GPS 장비를 사용할 수있는 상태로 유지되는 것은 어떨까요?안정적으로 GPS 서비스를 사용할지 여부를 감지하는 가장 좋은 방법은 CLLocationManagerDelegate을 구현하고 문제가있는 경우 사용자에게 알려줍니다에 그것을 통과 수있는 API를 NSError 검사

를 GPS를 사용할 수 있는지 여부를에게 말할 여부하도록하는 것입니다 ~

+0

네, 그러나 이것은 비행 모드에있는 장치 때문에 GPS를 사용할 수 없다는 것을 말해주지는 않습니다. – smacdonald

+0

비행기 모드 설정은 [CLLocationManager locationServicesEnabled] OR [CLLocationManager authorizationStatus]의 결과를 변경하지 않습니다. –

관련 문제