2014-12-05 13 views
11

Tôi cần yêu cầu vị trí liên tục trong ứng dụng của mình và nó luôn phải là dịch vụ nền.Cách tốt nhất Android để nhận vị trí nhiều lần trong nền cũng xem xét pin

Tôi cần latlng khoảng hai phút một lần. Tôi đã nghĩ đến việc sử dụng Dịch vụ và trong onStartCommand tôi sẽ sử dụng locationmanager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MINIMUM_TIME_INTERVAL, MINIMUM_DISTANCE, this); cũng như locationmanager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MINIMUM_TIME_INTERVAL, MINIMUM_DISTANCE, this);

Nhưng tôi sợ khi thời gian trôi qua yêu cầu nàyCập nhật ngừng cung cấp cho tôi vị trí. Vì vậy, tôi nghĩ đến việc sử dụng AlarmManager để nó tiếp tục cho tôi vị trí.

Câu hỏi của tôi là cần phải sử dụng AlarmManager để nhắc nhở nhận vị trí hoặc nếu tôi sử dụng AlarmManager nó sẽ tiêu hao nhiều pin.

Tôi chỉ muốn biết cách tiếp cận tốt nhất để có được vị trí ở chế độ nền. Cảm ơn trước.

Trả lời

3

Tại sao bạn muốn sử dụng dịch vụ này? Đối với tôi nó đang làm việc mà không có dịch vụ. Tôi có lớp được gọi là GPSlistener mà thực hiện LocationListener và có dòng này trong constructor của nó:

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 5, this); 

Tôi đang sử dụng phương pháp này bởi vì tôi không muốn locationUpdates để ngăn chặn nhưng bạn có thể sử dụng phương pháp này để bắt đầu nghe:

public void startListening(){ 
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 5, this); 
} 

và sau đó này để dừng lại nghe:

public void stopListening(){ 
    locationManager.removeUpdates(this) 
} 

Bạn có thể tiết kiệm pin bằng cách thiết lập cao hơn minTime hoặc minDistance. Tôi tin rằng minDistance nên phù hợp hơn với bạn. Vì vậy, ví dụ nếu bạn muốn cập nhật vị trí chỉ có mỗi 10 mét sau đó bạn gọi nó như

locationManager.requestLocationUpdates(LocationManager.GPS_Provider, 5000, 10, this)

thiết lập tốt nhất này phụ thuộc vào ứng dụng của bạn. Ví dụ: nếu bạn muốn tạo điều hướng GPS để đi xe đạp thì bạn nên sử dụng cập nhật vị trí sau tối đa 5m. Ở phía bên kia nếu bạn đang xây dựng ứng dụng cho một số hoạt động "chậm" như đi bộ đường dài thì 10 hoặc 15 mét là đủ, tôi nghĩ vậy.

Tôi không nghĩ rằng locationManager nên ngừng gửi cập nhật vị trí và tôi cũng không gặp sự cố này trong ứng dụng của mình.

Bằng cách sử dụng phương pháp này, tôi sẽ chạy GPS trong nền mà không cần sử dụng dịch vụ. Nhưng sự thật là ứng dụng của tôi chỉ bao gồm một hoạt động và 3 đoạn vì vậy tôi không cần sử dụng dịch vụ.

+0

Dịch vụ là bắt buộc vì mặc dù ứng dụng không chạy ở chế độ nền nhưng tôi có thể nhận vị trí. Vì vậy, sử dụng dịch vụ nó giúp tôi với điều đó. – Nav

+0

Tôi tin rằng requestLocationUpdates bắt đầu dịch vụ vì vậy tôi không nghĩ rằng bạn cần phải bắt đầu dịch vụ của riêng bạn cho việc này. Vấn đề của bạn là requestLocationUpdates ngừng gửi vị trí sau một thời gian ngắn? Tôi nhận được điều này một cách chính xác? – horin

+0

Ya. Nó không nên dừng lại ở bất kỳ thời điểm nào. – Nav

0

Google Play mới location APIs là do sự xa cách tốt nhất để đi. API vị trí hợp nhất tính đến tất cả các nhà cung cấp vị trí và độ chính xác của vị trí bạn cần để cung cấp vị trí tốt nhất cho ứng dụng của bạn.

API định vị địa lý (thông báo cho ứng dụng của bạn khi người dùng nhập/rời khỏi một khu vực nhất định) và API nhận dạng hoạt động (người dùng đang đi? Ngồi? Lái xe?) Cũng có thể rất hữu ích trong việc tiết kiệm pin và cải thiện chính xác.

Tất nhiên điều này yêu cầu người dùng có phiên bản cập nhật của ứng dụng Google Play, nhưng điều đó không đáng lo ngại lắm.

+2

Thực sự là một vấn đề với các thiết bị không được cấp phép của Google. Kindle Fire không có Google Play và cũng không có gì với ROM tùy chỉnh hoặc nhiều OEM Châu Á nhỏ. Trừ khi họ cướp biển nó tất nhiên. –

+0

Trong trường hợp đó, mặc định là trình quản lý vị trí của android nếu và chỉ khi dịch vụ google play không khả dụng. –

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