2009-01-28 41 views
17

Tôi đang tìm một số phản hồi, liên kết blog, v.v. cung cấp một số mẹo và thủ thuật để phát triển GPS iPhone. Tôi đã đọc và hiểu các API, tôi có ứng dụng demo của tôi và chạy, vv nhưng tôi đã chạy vào một số "quirks" với gps trên iphone. Ví dụ, có vẻ như bạn sẽ nhận được rất ít cập nhật vị trí khi iphone của bạn chuyển sang chế độ "tiết kiệm năng lượng". Tôi đã đọc rằng bạn có thể chống lại điều này bằng cách chơi nhạc trong ứng dụng của bạn [không chắc chắn nếu điều này là đúng].Phát triển GPS iPhone - Mẹo + Thủ thuật

Dường như, các thuật ngữ tạo một thước đo hợp lý, bạn nên lọc ra bất kỳ đọc nào với độ chính xác ngang dưới 20 mét. Điều này có đúng không?

Có danh sách kiểm tra nào trên web dành cho iphone gps gotchas không?

Xin cảm ơn trước.

Trả lời

39

Tôi không biết về bất kỳ danh sách cụ thể, nhưng đây là một vài điều bạn nên lưu ý:

  • Bạn sẽ không làm tra cứu GPS. Bạn đang thực hiện tra cứu Vị trí cốt lõi. Vị trí cốt lõi có thể hoặc có thể không nhận được thông tin từ GPS. Rất nhiều người vẫn sử dụng iPhone 3G trước đó không có GPS và thậm chí cả GPS trên điện thoại 3G có thể không khả dụng trong nhiều trường hợp (ví dụ: nếu người đó ở trong nhà). Trong những trường hợp đó, điện thoại sẽ cố gắng để triangulate dựa trên tháp điện thoại di động, và Core Location sẽ trả về kết quả. Nó sẽ ít chính xác hơn nhiều so với GPS.
  • Vị trí chính sẽ lưu trữ dữ liệu. Lần đọc đầu tiên nó cung cấp cho ứng dụng của bạn có thể là một bài đọc cũ, có thể hoặc không chính xác, tùy thuộc vào việc điện thoại đã di chuyển hay chưa. Đảm bảo kiểm tra dấu thời gian của bất kỳ vị trí nào và xem liệu dấu thời gian từ trước khi ứng dụng của bạn bắt đầu.
  • Tôi không biết ý của bạn là gì bằng chế độ "tiết kiệm năng lượng", nhưng nếu bạn đang nghĩ đến thời điểm màn hình bị khóa/tắt, điều đó sẽ không ngăn Vị trí cốt lõi chạy nếu ứng dụng của bạn vẫn đang chạy. Ngược lại, việc sạc pin điện thoại của bạn nhanh hơn rất nhiều so với mong đợi nếu bạn khóa điện thoại trong khi ứng dụng sử dụng Vị trí chính đang chạy, vì điện thoại sẽ tiếp tục cập nhật ứng dụng khi có dữ liệu vị trí mới. Bạn có thể tránh điều này trong ứng dụng của mình bằng cách nghe UIApplicationWillResignActiveNotification để phát hiện khóa màn hình và UIApplicationDidBecomeActiveNotification để phát hiện mở khóa.
  • Kết quả chính xác cao hơn sẽ mất nhiều thời gian hơn để có được, bởi vì bạn càng đợi lâu, kết quả càng tốt, đến giới hạn. Nếu bạn quyết định bạn cần nằm trong phạm vi N mét, hãy xem xét người dùng có thể phải chờ bao lâu để điện thoại ở nhà ở vị trí của nó.

Cho dù 20 mét là đủ chính xác là điều bạn chỉ có thể trả lời, dựa trên cách bạn mong đợi ứng dụng của mình được sử dụng. Kiểm tra ứng dụng và xem ứng dụng có hoạt động theo cách bạn muốn nó hoạt động không.

+0

[quote] • Tôi không biết bạn có ý nghĩa gì với chế độ "tiết kiệm năng lượng", nhưng nếu bạn đang nghĩ đến thời điểm màn hình bị khóa/tắt, điều đó sẽ không ngăn Vị trí cốt lõi chạy nếu ứng dụng của bạn vẫn đang chạy. [/ quote] Tôi không chắc liệu điều này có đúng không. Tôi nhận được một sửa chữa (17m HDOP) - sử dụng nút khóa - chờ 30 giây - và sau khi bật (mở khóa) một lần nữa phải mất một thời gian để sửa chữa một lần nữa - lần đầu tiên tôi nhận được là một "xấu" (khoảng 1000 mét) . Có vẻ như kết quả khóa trong "chế độ an toàn điện" cho vị trí (nó không còn sử dụng GPS tôi sẽ nói) – ManniAT

+2

Khi tôi viết câu trả lời này, iPhone OS 3.0 thậm chí không ở chế độ beta công khai, vì vậy có thể ít chính xác hơn hơn lúc đó. Các kỹ thuật chung vẫn áp dụng nhưng chi tiết về hành vi khi màn hình bị khóa xuất hiện đã thay đổi. –

26

Tom đã có một câu trả lời tuyệt vời (tôi muốn lưu ý đặc biệt là sự trở lại bình thường của giá trị đầu tiên có thể là một vị trí được lưu trữ cũ) nhưng tôi đã biết thêm một vài điều cần thêm:

  • Bạn có thể nói vị trí người quản lý dừng lại và bắt đầu lại nếu bạn muốn buộc nó phát hành cho bạn ít nhất một bản cập nhật vị trí khác.
  • Nếu bạn không biết, có các phương pháp tiện lợi trong CLLocation để cung cấp cho bạn khoảng cách giữa hai địa điểm.
  • Theo lưu ý của tài liệu, bạn nên triển khai locationManager: didFailWithError: mặc dù bạn không phải (nếu chỉ dừng cập nhật trình quản lý vị trí trong một thời gian).
  • Kiểm tra kỹ các tình huống mà người dùng không cho phép cập nhật vị trí cho ứng dụng của bạn!
  • Rất, rất thường xuyên bạn có thể nhận được cập nhật không đúng thứ tự (tức là bạn nhận được vị trí chính xác hơn, theo sau là vị trí chính xác hơn trước đây)
  • Trình mô phỏng sẽ báo cáo vị trí của bạn như Apple HQ.
+0

Cảm ơn nhiều Kendall. Tôi ước tôi cũng có thể kiểm tra câu trả lời của bạn! –

+1

Bỏ phiếu cho câu trả lời này cos nó thực sự đưa ra lời khuyên thực sự hữu ích về việc sử dụng. – Jann

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