Dont sử dụng getLastKnownLocation vì đó có thể là trở về dữ liệu null hoặc cũ.
Mã này Chỉ tìm nạp vị trí khi nhấn một nút và không phải mọi lần. Số người sử dụng rời khỏi vị trí người nghe lắng nghe trong mọi trường hợp và giết chết tuổi thọ pin nên Sử dụng đoạn mã tôi đã gửi bằng cách thực hiện rất nhiều nghiên cứu:
// get the text view and buttons from the xml layout
Button button = (Button) findViewById(R.id.btnGetLocation);
final TextView latitude = (TextView) findViewById(R.id.textview4);
final TextView longitude = (TextView) findViewById(R.id.textview5);
final LocationListener locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
mlocation = location;
Log.d("Location Changes", location.toString());
latitude.setText(String.valueOf(location.getLatitude()));
longitude.setText(String.valueOf(location.getLongitude()));
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
Log.d("Status Changed", String.valueOf(status));
}
@Override
public void onProviderEnabled(String provider) {
Log.d("Provider Enabled", provider);
}
@Override
public void onProviderDisabled(String provider) {
Log.d("Provider Disabled", provider);
}
};
// Now first make a criteria with your requirements
// this is done to save the battery life of the device
// there are various other other criteria you can search for..
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_COARSE);
criteria.setPowerRequirement(Criteria.POWER_LOW);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setSpeedRequired(false);
criteria.setCostAllowed(true);
criteria.setHorizontalAccuracy(Criteria.ACCURACY_HIGH);
criteria.setVerticalAccuracy(Criteria.ACCURACY_HIGH);
// Now create a location manager
final LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
// This is the Best And IMPORTANT part
final Looper looper = null;
// Now whenever the button is clicked fetch the location one time
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
locationManager.requestSingleUpdate(criteria, locationListener, looper);
}
});
ngươi thats chính xác câu hỏi của tôi, tôi thiết lập một onLocationChanged và tôi muốn chỉ nhận được một vị trí hợp lệ .. làm thế nào tôi có thể dừng luồng cập nhật? Có lệnh nào không? Cảm ơn – progdoc
Câu trả lời ngắn LocationManager.removeUpdates(). Câu trả lời dài, xem cập nhật của tôi. – Sam
cảm ơn nó đã làm việc – progdoc