Nếu bạn muốn chụp vị trí khi nhấn nút, dưới đây là cách bạn thực hiện. Nếu người dùng không bật dịch vụ vị trí, điều này sẽ gửi họ tới menu cài đặt để bật dịch vụ đó.
Trước tiên, bạn phải thêm quyền "android.permission.ACCESS_COARSE_LOCATION" vào tệp kê khai của mình. Nếu bạn cần GPS (vị trí mạng là không đủ nhạy cảm), thêm sự cho phép "android.permission.ACCESS_FINE_LOCATION" thay vào đó, và thay đổi "Criteria.ACCURACY_COARSE" thành "Criteria.ACCURACY_FINE"
Button gpsButton = (Button)this.findViewById(R.id.buttonGPSLocation);
gpsButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// Start loction service
LocationManager locationManager = (LocationManager)[OUTERCLASS].this.getSystemService(Context.LOCATION_SERVICE);
Criteria locationCritera = new Criteria();
locationCritera.setAccuracy(Criteria.ACCURACY_COARSE);
locationCritera.setAltitudeRequired(false);
locationCritera.setBearingRequired(false);
locationCritera.setCostAllowed(true);
locationCritera.setPowerRequirement(Criteria.NO_REQUIREMENT);
String providerName = locationManager.getBestProvider(locationCritera, true);
if (providerName != null && locationManager.isProviderEnabled(providerName)) {
// Provider is enabled
locationManager.requestLocationUpdates(providerName, 20000, 100, [OUTERCLASS].this.locationListener);
} else {
// Provider not enabled, prompt user to enable it
Toast.makeText([OUTERCLASS].this, R.string.please_turn_on_gps, Toast.LENGTH_LONG).show();
Intent myIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
[OUTERCLASS].this.startActivity(myIntent);
}
}
});
lớp bên ngoài của tôi có người nghe này được thiết lập
private final LocationListener locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
[OUTERCLASS].this.gpsLocationReceived(location);
}
@Override
public void onProviderDisabled(String provider) {}
@Override
public void onProviderEnabled(String provider) {}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {}
};
Sau đó, bất cứ khi nào bạn muốn ngừng nghe, hãy gọi cho cuộc gọi này. Bạn nên thực hiện cuộc gọi này trong phương thức onStop của hoạt động của bạn.
LocationManager locationManager = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
locationManager.removeUpdates(this.locationListener);
Tham số thứ hai trên getBestProvider (locationCritera, true) kiểm tra mà các nhà cung cấp là được bật, do đó, về mặt lý thuyết, bạn không cần phải kiểm tra xem nó có được bật lại hay không. – Eduardo