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