2009-10-22 41 views
17

Vì vậy, tôi đang cố gắng lấy mẫu tọa độ gps chỉ một lần trong một ứng dụng. Tôi không muốn tạo ra một đối tượng LocationListener để liên tục nhận được bản cập nhật gps. Tôi muốn đợi cho đến khi nhận được tọa độ, và sau đó tiến hành một nhiệm vụ khác.Android LocationManager.getLastKnownLocation() trả về null

Đây là một đoạn mã

LocationManager lm = (LocationManager)act.getSystemService(Context.LOCATION_SERVICE); 
Criteria crit = new Criteria(); 
crit.setAccuracy(Criteria.ACCURACY_FINE); 
String provider = lm.getBestProvider(crit, true); 
Location loc = lm.getLastKnownLocation(provider); 

Biến loc phải lúc nào cũng null trong giả lập. Tôi đã thử sử dụng lệnh "kinh độ sửa vĩ độ địa lý" để thiết lập nó và tôi cũng đã thử sử dụng cách thiết lập DDMS. Cả hai phương pháp đều không ảnh hưởng đến mã. Ngoài ra đoạn trích không gây ra bất kỳ ngoại lệ nào.

Cảm ơn sự giúp đỡ của bạn.

+1

Đây là ví dụ hay về mã nguồn [http://marakana.com/forums/android/android_examples/42.html](http://marakana.com/forums/android/android_examples/42.html) – Fedor

Trả lời

11

Cuộc gọi yêu cầu cập nhật vị trí không bị chặn, do đó nó sẽ không đợi ở đó. Ngoài ra, nhà cung cấp trong trình giả lập có thể chưa được bắt đầu.

Có thể kiểm tra xem cài đặt trong đó có tắt nhà cung cấp gps không? sau đó gửi bản sửa lỗi địa lý.

Tuy nhiên, tôi sẽ sử dụng Trình xử lý vị trí, điều này lý tưởng trong trường hợp của bạn vì bạn cần sửa lỗi địa lý để tiếp tục. Trình nghe vị trí được sử dụng để nhận thông báo từ Trình quản lý vị trí khi vị trí đã thay đổi. Bạn có thể hủy đăng ký người nghe sau geofix đầu tiên.

Lưu ý: Có thể mất một chút thời gian trên thiết bị để nhận vị trí hiện tại và thậm chí trên thiết bị, điều này có thể trả về giá trị rỗng.

+0

Vâng, làm một LocationListener sau đó chờ đợi cho đến khi bạn có một sửa chữa bạn đang hạnh phúc với khá nhiều lựa chọn duy nhất của bạn. Như đã đề cập, bạn có thể hủy đăng ký ngay lập tức. –

+8

Nó chỉ ra rằng không có bất kỳ LocationListener nó sẽ không hoạt động. Ngay cả chỉ cần thêm một LocationListener giả mà thậm chí không làm bất cứ điều gì sẽ gây ra điện thoại để có được tọa độ gps. –

+0

Tôi giả sử LocationListener cập nhật một số vị trí đã lưu trong bộ nhớ cache, vị trí mà Trình quản lý vị trí sử dụng. Cảm ơn vì đăng. – krishc

0

Hãy thử sử dụng MyLocationOverlay, tạo một Runnable mà những gì bạn cần làm với vị trí GPS, và vượt qua nó để

boolean  runOnFirstFix(java.lang.Runnable runnable) 
      Queues a runnable to be executed as soon as we have a location fix. 

và sau đó vô hiệu hóa cập nhật vị trí cho MyLocationOverlay.

Chỉnh sửa: Lý do vị trí là null là do tại thời điểm mã được chạy, không nhận được geofix.

+0

I có được một null quá, nhưng các ứng dụng bản đồ Google biết nơi tôi ngay lập tức vì vậy phải có một số sửa chữa được lưu trữ đi somwwhere. –

+0

Sử dụng một runnable là thông minh nhưng không cần phải mang lại trong api bản đồ google cho vấn đề này. – Dorje