2013-05-19 28 views
7

Tôi vừa hoàn thành hướng dẫn về định vị địa lý trên Android (http://developer.android.com/training/location/geofencing.html) và tôi tự hỏi tại sao 'gọi lại' cho geofences được thực hiện thông qua ý định đang chờ xử lý chứ không phải giao diện gọi lại đơn giản.Android - Tại sao sử dụng các tham chiếu đang chờ xử lý cho geofences

Nếu được triển khai trong một hoạt động, thường sẽ ngắt kết nối ứng dụng khách theo vị trí onPause(), vì vậy các vị trí địa lý được thêm trước đó sẽ không được theo dõi sau khi ứng dụng bị tạm dừng/bị hủy. Hay tôi nhầm ở đây?

Trả lời

18

Tôi tự hỏi tại sao 'gọi lại' cho geofences được thực hiện thông qua các mục đích đang chờ xử lý chứ không phải giao diện gọi lại đơn giản.

Chủ yếu là vì geofences được thiết kế để hoạt động ngay cả khi ứng dụng của bạn không chạy.

Nếu được thực hiện trong một hoạt động, thường sẽ ngắt kết nối ứng dụng định vị trong onPause(), vì vậy, các vị trí địa lý được thêm trước đó sẽ không được theo dõi sau khi ứng dụng bị tạm dừng/bị hủy. Hay tôi nhầm ở đây?

Tôi tin rằng bạn bị nhầm lẫn ở đây. Trong thực tế, giới hạn địa lý đặc biệt không được thiết kế cho trực tiếp kích hoạt giao diện người dùng, như được thảo luận trong the documentation:

Các Ý định gửi từ Location Services có thể kích hoạt các hành động khác nhau trong ứng dụng của bạn, nhưng bạn không nên có nó bắt đầu một hoạt động hoặc đoạn , vì các thành phần chỉ nên hiển thị để phản hồi lại hành động của người dùng.

Bây giờ, bạn có thể chọn để nói rằng bạn muốn chỉ sử dụng geofences trong khi bạn có hoạt động của bạn ở nền trước. Tuy nhiên, bạn sẽ phải xóa các vị trí địa lý đó trong onPause(). Một geofence sẽ vẫn được đăng ký cho đến khi thời gian hết hạn của nó hoặc bằng tay gỡ bỏ, AFAICT.

+0

Đúng, những gì bạn nói là hoàn toàn chính xác - Tôi vừa thử nó :) – Flo

+2

Trong thử nghiệm của tôi, mã mẫu từ Google ngừng hoạt động nếu ứng dụng của tôi bị giết. Vì vậy, tôi chuyển sang một Broadcast Receiver thay vì một IntentService và sau đó giám sát nền hoạt động như dự đoán. http://stackoverflow.com/questions/19505614/android-geofence-eventually-stop-getting-transition-intents/19521823#19521823 –

1

Câu trả lời này có thể lỗi thời - tính chính xác và tính thực tế của dịch vụ google play đã thay đổi rất nhiều so với bản phát hành ban đầu.

Một số trải nghiệm của tôi với tính năng định vị địa lý bên dưới. Trước hết - lợi thế chính của công nghệ này là sử dụng pin rất thấp. Trong thực tế, tôi không thể nhận thấy bất kỳ thay đổi nào về tuổi thọ pin. Nó thực sự ấn tượng. Dịch vụ dường như chỉ sử dụng Wi-Fi và vị trí mạng. Tôi không nhận thấy GPS đang chạy. Tôi không thể nói nếu nó chỉ là biểu tượng địa điểm ẩn hoặc thực sự không sử dụng GPS. Độ chính xác - thật khủng khiếp. 20 khu vực vòng tròn không được phát hiện ở tất cả, ngoại trừ phạm vi của nhà tôi ap. Có vẻ như toàn bộ vòng tròn vị trí, bao gồm lỗi phải nằm trong khu vực có rào chắn. Các khu vực 1000m được phát hiện đôi khi và có độ trễ lớn. Những thí nghiệm được thực hiện trong khu vực mở với số lượng Wi-Fi rất thấp xung quanh. Tôi vẫn đang cố gắng tìm các cài đặt thực sự đáng tin cậy để thực hiện dịch vụ này. Sau khi nhận được ý định tôi muốn bật vị trí GPS và thực hiện cách tiếp cận cuối cùng trong mã của riêng tôi.

+0

"độ trễ lớn" như trong trải nghiệm của bạn là gì ?? – Ewoks

+0

Hi - Như tôi đã viết trong lưu ý cho câu trả lời của tôi - rất nhiều đã thay đổi - độ trễ nhỏ hơn nhiều.Trong khu vực đô thị điển hình, nó hoạt động rất tốt. – piotrpo

+0

chính xác "nhỏ hơn nhiều" là gì? 1 giây, 1 phút, 1h? – Ewoks

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