2013-06-04 29 views
7

Tôi đang sử dụng API vị trí mới đã được giới thiệu trong I/O 2013.Android, Yêu cầu vị trí, đặt thời hạn hết hạn không hoạt động

Nó hoạt động tốt và tôi không gặp vấn đề gì với kết quả của nó. Vấn đề của tôi là khi tôi đặt setExpirationDuration(WHATEVER_MILLIS) thành bất kỳ millis nào, tuy nhiên nó hoạt động trong một phút.

Đây là mã của tôi:

LocationRequest locationRequest = LocationRequest.create() 
          .setInterval(10 * 60 * 1000) // every 10 minutes 
          .setExpirationDuration(10 * 1000) // After 10 seconds 
          .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 

Khi tôi chạy các ứng dụng, chỉ số vệ tinh sẽ được hiển thị trong khay như vậy, tôi mong đợi để xem nó chỉ trong 10 giây. Tuy nhiên, nó sẽ biến mất sau một phút.

Mọi đề xuất hoặc nhận xét sẽ được đánh giá cao. Cảm ơn.

+0

Có thể khoảng thời gian được chia cho thời gian hết hạn để lại 1 phút – JRowan

+0

Cảm ơn JRowan, cho dù tôi đặt chỉ báo vệ tinh milli sẽ hiển thị trong một phút. – Hesam

+0

Bạn có nghĩ rằng độ chính xác cao có ưu tiên không, gps mất một chút về nhà ở một vị trí chính xác, có thể ghi đè hết hạn – JRowan

Trả lời

1

Vì nó có vẻ là một vấn đề thực sự trong Android, một giải pháp có thể là một Trình xử lý để xóa các cập nhật vị trí theo cách thủ công.

listHandler = new Handler() { 
     public void handleMessage(Message msg) { 
      if (msg.what == 0) { 
       mLocationClient.removeLocationUpdates(MyActivity.this); 
       //Location Updates are now removed 
      } 
      super.handleMessage(msg); 
     } 
    }; 

Sau khi bạn yêu cầu cập nhật vị trí (trong thời gian tối đa 10s) bạn gọi Trình xử lý này, tất nhiên bị trì hoãn trong 10 giây.

myLocationClient.requestLocationUpdates(...); 
listHandler.sendEmptyMessageDelayed(0, 10000); 

Điều này đảm bảo rằng sau 10 lần cập nhật vị trí của bạn sẽ bị xóa.

1

Trong tài liệu hướng dẫn (https://developer.android.com/reference/com/google/android/gms/location/LocationRequest.html#setExpirationDuration(long))

Nó nói rằng: "Thời gian bắt đầu ngay lập tức (và không phải khi yêu cầu được chuyển cho khách hàng vị trí), vì vậy gọi phương thức này một lần nữa nếu yêu cầu là tái được sử dụng sau này. "

Một mong chờ thời gian này để bắt đầu khi dòng sau đây được gọi là:

LocationServices.FusedLocationApi.requestLocationUpdates(googleApiClient, request, this); 

Nhưng, tiểu bang tài liệu thời gian này bắt đầu khi yêu cầu đối tượng được tạo ra.

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