6

Tôi chuẩn bị triển khai tính năng với geofences và trước khi tôi hoàn thành công việc nghiêm túc, tôi cần biết liệu geofences có còn hoạt động hay không sau lần chuyển đổi đầu tiên .Android Geofences vẫn hoạt động cho đến khi bị xóa/hết hạn hoặc chỉ cho đến khi PendingIntent của tôi được khởi chạy

Cốt lõi của tính năng này là:

mỗi khi tôi đang ở trong x mét của điểm P (gọi đây là Khu A), tôi muốn Action B xảy ra.

Những gì tôi cần biết là

  • Tôi chỉ cần thêm một geofence với Geofence.NEVER_EXPIRE và yên tâm rằng tôi sẽ nhận được một PendingIntent mỗi khi tôi vào khu vực quy định không phân biệt thời gian trôi qua, khởi động lại, vv

HOẶC

  • Tôi có phải đăng ký lại địa lý này khi tôi thoát khỏi Khu A để được thông báo vào lần tiếp theo tôi nhập Khu A?

Tôi hy vọng rằng cựu là trường hợp

Trả lời

7

Các đề xuất tốt là người đầu tiên. Nếu bạn tạo một geofence với cờ NEVER_EXPIRE là thời gian hết hạn, bạn sẽ không phải đăng ký lại nó khi nó được kích hoạt (bằng cách vào hoặc ra). Tôi chắc chắn 100% trong số này, tôi đã hoàn thành việc viết mã và kiểm tra POC về geofence.

Từ tài liệu, cách duy nhất để xóa địa lý là thời gian hết hạn hoặc đã bị xóa bởi chính thiết bị.

Thời gian hết hạn

bao lâu geofence nên duy trì hoạt động. Khi đã đạt đến thời gian hết hạn , Dịch vụ vị trí sẽ xóa geofence. Hầu hết thời gian, bạn nên chỉ định thời gian hết hạn, nhưng bạn có thể muốn giữ vĩnh viễn địa lý cho nhà hoặc nơi làm việc của người dùng.

Để ngăn chặn theo dõi geofence, bạn loại bỏ các giới hạn địa lý tự

+0

_I 100% nhất định this_ Cảm ơn @Marcel – copolii

+0

Tôi thường cảm thấy sợ khi ai đó nói "Tôi chắc chắn 100% về điều này" ... nó hoạt động nào – lelloman

+0

bây giờ chúng ta đang sống trong một thời điểm nghi ngờ –

6

Hãy nhớ rằng NEVER_EXPIRE sẽ gây ra geofence được đăng ký ngay cả sau khi người dùng gỡ bỏ các ứng dụng trong trường hợp các ứng dụng không gỡ bỏ chúng. Không có cách nào để loại bỏ chúng. Không bao giờ. Vì vậy, họ sẽ tiếp tục tháo pin. Do đó, thiết lập thời gian hết hạn được khuyến khích và đặt lại geofence trong trường hợp chúng hết hạn trước khi bạn muốn chúng.

+3

Một rất hợp lệ điểm, nhưng tôi tự hỏi tại sao nó được thực hiện theo cách này. Nếu ứng dụng X được gỡ cài đặt, chúng tôi biết chắc chắn rằng không có gì sẽ có sẵn để phục vụ PendingIntent. Tôi tự hỏi nếu đó là một lỗi ... nó chắc chắn có vẻ như vậy ... một khi bạn gỡ cài đặt ứng dụng của tôi khỏi thiết bị của bạn, tôi có doanh nghiệp không còn lại trên điện thoại của bạn. – copolii

+8

@hajons Có phải trong tài liệu ở đâu đó không? Làm thế nào để bạn biết rằng những hàng rào được giữ lại ngay cả sau khi gỡ cài đặt? –

+0

Điều này có vẻ không đúng, vì [tài liệu] (https://developer.android.com/training/location/geofencing.html) cho biết rằng bạn phải đăng ký lại địa lý khi ứng dụng được gỡ cài đặt và quay lại -Cài đặt. Nếu chúng được giữ lại trên các lần gỡ cài đặt không cần thiết. –

1

Lưu ý rằng "tất cả các địa lý đã đăng ký sẽ bị xóa" trong trường hợp THIS (nghĩa là khi người dùng tắt Vị trí là cài đặt điện thoại của anh ấy).

ĐƯỢC TƯ VẤN: ở đầu tài liệu đó là cảnh báo "Lớp này không được dùng nữa. Sử dụng LocationServices".

1

Trong khi bạn sẽ nhận được mục đích đang chờ (chuyển tiếp) bất kể bạn nhập/thoát khỏi geofence bao nhiêu lần, bắt được là khởi động lại thiết bị sẽ xóa tất cả các vị trí địa lý của bạn. Vì vậy, trong trường hợp thiết bị khởi động lại, bạn phải đăng ký lại tất cả các giới hạn địa lý của bạn một lần nữa (mà bạn đã có thể lưu thông qua sở thích chia sẻ) sử dụng một máy thu phát sóng và đặt tác vụ lọc ý định

android.intent.action.BOOT_COMPLETED

và phép:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

trong AndroidManifest.xml.

Ngoài ra, hãy nhớ rằng hệ thống khôi phục geofences ngay cả khi Dịch vụ của Google Play bị giết + khởi động lại/nâng cấp nhưng không phải nếu bạn xóa dữ liệu của nó. Tương tự cũng được đề cập trong phần developer docs trong phần "Chỉ đăng ký lại địa lý khi được yêu cầu"

Cũng lưu ý, trong trường hợp người dùng bật hoặc tắt cài đặt vị trí/gps, tất cả các vị trí địa lý sẽ bị xóa và mục đích được tạo bởi mục đích đang chờ xử lý được cung cấp. Trong trường hợp này, hàm hasError() api sẽ trả về true và getErrorCode() api sẽ trả về GEOFENCE_NOT_AVAILABLE.