2011-10-08 37 views
9

CẬP NHẬT: Kể từ một số phiên bản iOS 8 (8.3, có thể), phần cứng GPS có thể được bật ngay cả ở chế độ trên máy bay (tức là bạn có thể nhận vị trí GPS ngay cả ở chế độ trên máy bay). Điều này ám chỉ câu hỏi này.Xác định xem Chế độ trên máy bay có được bật trên iPhone không?

-

Có thể xác định theo chương trình nếu iPhone đang ở Chế độ trên máy bay không? Tôi đặc biệt muốn biết nếu nó ở chế độ AirPlane, trái ngược với việc có (hoặc không có) một kết nối mạng. Câu hỏi này đã được hỏi rất nhiều, nhưng mọi câu trả lời tôi đã nhìn thấy đều đề cập đến mã Khả năng hiển thị của Apple để xác định xem có kết nối mạng hay không.

Tôi đang viết một ứng dụng sử dụng GPS của iPhone. Hiện tại, nếu Chế độ trên máy bay được bật và ứng dụng của tôi được khởi chạy, đối tượng trình quản lý vị trí của tôi vẫn xuất hiện và dường như vẫn đang cho tôi vị trí (được lưu trong bộ nhớ cache). Biểu tượng GPS nhỏ xuất hiện trên thanh trạng thái để cho tôi biết rằng ứng dụng của tôi đang xác định vị trí.

Airplane Mode and GPS arrow indicator

Tôi muốn biết nếu điện thoại ở chế độ Airplane vì vậy mà tôi không thể khởi tạo các đối tượng quản lý vị trí và tôi có thể thay đổi giao diện người dùng của tôi để chỉ ra cho người dùng biết GPS chức năng không có sẵn.

Chức năng GPS rõ ràng có thể được sử dụng bất kể kết nối mạng, do đó việc thiếu kết nối mạng sẽ đánh tôi là proxy kém cho Chế độ trên máy bay. Tôi dường như không nhận được bất kỳ lỗi cụ thể nào (thông qua locationManager: didFailWithError) khi ở Chế độ trên máy bay, chỉ là lỗi chung mà tôi giả định có thể đến từ một số nguồn.

Trả lời

5

Yêu cầu tương tự cho ứng dụng của tôi, ngoại trừ tôi biết trước rằng nó rất có thể được sử dụng trong môi trường "không có tín hiệu di động" (cắm trại ở vùng xa) và người dùng có thể đặt thiết bị ở chế độ trên máy bay để bảo tồn pin, mà không nhận ra nó sẽ tắt GPS.

Vì chế độ trên máy bay không dẫn đến didFailWithError và locationServicesEnabled trả về có, tôi đặt hẹn giờ trong 60 giây và nếu không đọc GPS được trả về trước khi hết giờ, tôi sẽ hiển thị thông báo cho người dùng nói với họ rằng GPS không thể đọc dữ liệu và đề nghị họ kiểm tra chế độ trên máy bay không được bật và đảm bảo rằng chúng có tầm nhìn rõ ràng về bầu trời.

+0

Cảm ơn. Đây là những gì tôi đã làm. – smacdonald

+0

Trường hợp khác cần được đề cập đến người dùng trong thông báo lỗi, là họ nên xác minh ứng dụng đã được cấp quyền truy cập vào dữ liệu GPS. Tôi đã có một người dùng nhấn mạnh rằng ứng dụng đã bị hỏng, chỉ để tìm ra anh ta đã nhấn "Don't Allow" trên cửa sổ pop-up cho phép. –

+1

Bạn sẽ nhận được kết quả lỗi 'kCLErrorDenied' trong phương thức' locationManager: didFailWithError: 'nếu người dùng chưa bật dịch vụ vị trí cho ứng dụng của bạn. Tôi đã có một hộp thoại báo lỗi cụ thể để xử lý với trường hợp. Nếu thiết bị ở chế độ trên máy bay, bạn gặp lỗi 'kCLErrorLocationUnknown' chung. – smacdonald

3

Tôi không biết nếu nó có thể để có được thông tin này, ít nhất là sử dụng các lớp học nào, nhưng nếu những gì bạn cần là để cảnh báo cho người dùng biết anh ấy trong Airplane Mode, như vậy với chức năng ứng dụng hạn chế, bạn có thể thiết lập trong tệp Info.plist của bạn thuộc tính UIRequiresPersistentWiFi thành "true". Sau đó, khi Chế độ trên máy bay được đặt, bạn sẽ nhận được thông báo này. Bằng cách này, lưu ý rằng cách tiếp cận này tốt hơn là chỉ kiểm tra trạng thái Chế độ trên máy bay, không phải vì nó được hệ thống hỗ trợ, như thể người dùng bật Chế độ trên máy bay và sau đó bật lại Wi-Fi (vẫn ở Chế độ trên máy bay) cảnh báo hệ thống sẽ không được hiển thị.

+0

Cảm ơn. Tôi đã làm điều này, nhưng có vẻ như tôi là một chút của một fudge (như ứng dụng của tôi không cần bất kỳ kết nối mạng, hãy để một mình kết nối WiFi). Tôi cũng nghĩ rằng nó có phân nhánh tiêu cực cho tuổi thọ pin, như sự hiểu biết của tôi là nó giữ cho kết nối WiFi hoạt động. Có thể bạn nói đúng - có lẽ không có cách nào để có được thông tin này. – smacdonald

1

Một giải pháp có thể là take a screenshot of the device và xem xét các màu có trong khu vực đó. Nếu họ là màu cam, bạn đang ở chế độ trên máy bay.

+3

Tôi thích suy nghĩ bên của bạn, nhưng tôi tưởng tượng giải pháp này sẽ dễ bị phá vỡ theo các phiên bản khác nhau của iOS và có thể trên phần cứng khác nhau. Nếu tôi không thể làm được gì khác, tôi có thể cho đi. – smacdonald

+0

Vâng, nó chắc chắn là một giải pháp hacky. API tích hợp sẵn sẽ thích hợp hơn nhiều. – ceejayoz

+2

Khi bạn chụp ảnh màn hình trên thiết bị, thanh trạng thái không được bao gồm. –

0

Bạn thực sự không nên cố gắng kiểm tra xem Chế độ trên máy bay có được bật hay không. Điều gì sẽ xảy ra nếu Apple thực hiện thay đổi về cách Chế độ trên máy bay hoạt động, nơi mà Chế độ trên máy bay sẽ bật thiết bị GPS ngay cả khi được bật?Cách tốt nhất để chắc chắn phát hiện xem các dịch vụ GPS được kích hoạt là để thực hiện các CLLocationManagerDelegate và để cho các API nói bạn biết liệu GPS có sẵn hay không

Kiểm tra NSError nó có thể vượt qua bạn sẽ cho bạn biết nếu có những vấn đề đến

+0

Có, nhưng điều này sẽ không cho tôi biết rằng GPS không khả dụng do thiết bị đang ở chế độ trên máy bay. – smacdonald

+0

Cài đặt chế độ trên máy bay không làm thay đổi kết quả của [Vị trí quản lý vị trí CLLocationEnabled] HOẶC của [CLLocationManager authorizationStatus]. –

Các vấn đề liên quan