2013-06-11 28 views

Trả lời

17

Geofences sẽ không tồn tại khi khởi động lại. Tôi đã thử nghiệm và bạn có thể tìm thấy mẫu here.

Bạn phải nghe lại BOOT_COMPLETED và thêm lại geofences.

Lưu ý: Nếu ứng dụng của bạn được cài đặt trên bên ngoài lưu trữ (thẻ SD), bạn sẽ không bao giờ nhận Boot Hoàn tất tác vụ. Vì vậy, bạn phải chỉ định android:installLocation="internalOnly" trong số manifest tag. Điều này là do thiết bị Android sẽ phát hành hành động BOOT_COMPLETED trước khi thiết lập bộ nhớ ngoài.

+0

Xin chào, trong http://developer.android.com/training/location/geofencing.html hướng dẫn này tôi thực sự không hiểu việc sử dụng 'SharedPreferences' vì chúng không bao giờ được sử dụng trong điều khoản truy cập dữ liệu. Bạn có biết lý do tại sao lưu trữ Presistent được sử dụng. –

+1

Khi bạn được kích hoạt từ Geofence, bạn sẽ nhận được id của geofence cụ thể đó. Nhưng trong thời gian thực chúng ta có rất nhiều thông tin thay vì chỉ là một id. SharedPreferences giống như lưu trữ để lưu thông tin địa lý ousr như id, tin nhắn, lat, lng và một vài giá trị khác được liên kết với nó. – Sundeep1501

+0

Cảm ơn Sundeep có vẻ hợp lý. Tôi đã lưu trữ dữ liệu Geofence trong cơ sở dữ liệu. Tôi đã nhầm lẫn và giả định rằng có thể GeoFence Api sử dụng dữ liệu đã được lưu trong 'SharedPreferences'. –

-1

Bạn muốn lưu giữ dữ liệu nào? Đây có phải là vùng địa lý trong thiết bị của bạn hoặc vùng địa lý được API Vị trí Dịch vụ của Google Play lưu trữ không?

Tôi tin rằng thiết bị cần đăng ký một khu vực (được xác định bởi vĩ độ, kinh độ và bán kính) của mình cho Dịch vụ của Google Play (thông qua LocationClient). Bạn cũng cần phải cung cấp thời gian hết hạn, loại chuyển đổi bạn muốn được thông báo và Mục đích mà từ đó bạn sẽ được thông báo.

Khu vực này sẽ được lưu trữ (từ xa) không có trong ứng dụng của bạn. Khi nó vượt qua thời gian hết hạn, Dịch vụ Google Play sẽ tự động xóa nó. Bạn cũng có thể đặt nó là NEVER_EXPIRE. Nếu khu vực chưa hết hạn, Dịch vụ Google Play sẽ thông báo cho Ứng dụng của bạn (thông qua mục đích mà bạn gửi khi gọi điện cho các cuộc gọi bổ sung).

Nguồn của khu vực (vĩ độ, dài, bán kính) tùy thuộc vào việc triển khai của bạn.

+0

cảm ơn, bạn có nguồn cho điều đó không? – ligi

+0

Xem các tài liệu sau: http://developer.android.com/reference/com/google/android/gms/location/Geofence.Builder.html và [http://developer.android.com/reference/com/google /android/gms/location/LocationClient.html#addGeofences(java.util.List, android.app.PendingIntent, com.google.android.gms.location.LocationClient.OnAddGeofencesResultListener)] – ogramus

+0

Tôi vừa xem xét một ứng dụng mẫu GeofencingDetection khác. – ogramus

4

Tôi chưa tìm thấy bất kỳ tài liệu nào xác nhận điều này, nhưng các thử nghiệm của riêng tôi đã cho thấy rằng chúng không được duy trì trong quá trình khởi động lại.

thiết lập của tôi là như sau:

  • Chạy ứng dụng
  • Ứng dụng thiết lập giới hạn địa lý khác nhau trên khởi động đầu tiên chỉ như NEVER_EXPIRE
  • ứng dụng Exit
  • Sử dụng điện thoại tại các khu vực được đánh dấu bằng hàng rào
  • Xác nhận hàng rào kích hoạt các mục đích đang chờ xử lý được gửi đến IntentService
  • Rời khỏi khu vực
  • Khởi động lại điện thoại
  • Nhập lại khu vực
  • Trong khi chờ ý định không được gửi đến IntentService

Nếu ai có thêm thông tin về vấn đề này từ một người nào đó tại Google xin vui lòng bình luận!

+0

Bạn phải thêm lại geofences khi khởi động lại. Như tài liệu nói rằng geofences được loại bỏ khi khởi động lại. –

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