В настоящее время я создаю приложение, где мне нужно получить местоположение пользователя, когда нажимается кнопка. Я использую образец this, и он отлично работает как пример приложения. Мой вопрос заключается в том, как я могу реализовать его в моей кнопке приложения onClick? Мне не нужно его часто обновлять, я просто нуждаюсь в нем, чтобы, когда пользователь нажимает кнопку, он получает широту и долготу пользователя и сохраняет их в двух переменных. Какой был бы лучший способ сделать это? Я не опубликовал свой собственный код, потому что у меня есть кнопка с событием onClick.Как я могу получить местоположение Android сразу одним нажатием кнопки?
ответ
Выполните следующие шаги, чтобы получить место на кнопку мыши:
Implement LocationListener
в своей деятельности, как:
public class MainActivity Extends AppCompactActivity implements LocationListener
Затем создайте экземпляр для LocationManager
, longitude
и latitude
, как показано ниже:
LocationManager locationManager; // create global outside all methods
Double currentLattitude, currentLongitude;
Установите событие click на вашей кнопке, как показано ниже:
btnLocation.setOnClickListner(new View.onClickListner
{
@Override
public void onClick(View v)
{
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
}
});
Теперь реализовать метод LocationListener
, как показано ниже:
@Override
public void onLocationChanged(Location location) {
currentLattitude = location.getLatitude();
currentLongitude = location.getLongitude());
}
@Override
public void onProviderDisabled(String provider) {
Log.d("Latitude","disable");
}
@Override
public void onProviderEnabled(String provider) {
Log.d("Latitude","enable");
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
Log.d("Latitude","status");
}
При этом, вы можете получить ваше местоположение с помощью на щелчком кнопки.
Главное, чтобы не забудьте это установить разрешение (в манифесте), как показано ниже:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission. ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
Использование слиты расположение API это самый быстрый из всех остальных.
public class LocationActivity extends Activity implements
LocationListener,
GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener {
private static final String TAG = "LocationActivity";
private static final long INTERVAL = 1000 * 10;
private static final long FASTEST_INTERVAL = 1000 * 5;
Button btnFusedLocation;
TextView tvLocation;
LocationRequest mLocationRequest;
GoogleApiClient mGoogleApiClient;
Location mCurrentLocation;
String mLastUpdateTime;
protected void createLocationRequest() {
mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(INTERVAL);
mLocationRequest.setFastestInterval(FASTEST_INTERVAL);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate ...............................");
//show error dialog if GoolglePlayServices not available
if (!isGooglePlayServicesAvailable()) {
finish();
}
createLocationRequest();
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(LocationServices.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
setContentView(R.layout.activity_main);
tvLocation = (TextView) findViewById(R.id.tvLocation);
btnFusedLocation = (Button) findViewById(R.id.btnShowLocation);
btnFusedLocation.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
updateUI();
}
});
}
@Override
public void onStart() {
super.onStart();
Log.d(TAG, "onStart fired ..............");
mGoogleApiClient.connect();
}
@Override
public void onStop() {
super.onStop();
Log.d(TAG, "onStop fired ..............");
mGoogleApiClient.disconnect();
Log.d(TAG, "isConnected ...............: " + mGoogleApiClient.isConnected());
}
private boolean isGooglePlayServicesAvailable() {
int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
if (ConnectionResult.SUCCESS == status) {
return true;
} else {
GooglePlayServicesUtil.getErrorDialog(status, this, 0).show();
return false;
}
}
@Override
public void onConnected(Bundle bundle) {
Log.d(TAG, "onConnected - isConnected ...............: " + mGoogleApiClient.isConnected());
startLocationUpdates();
}
protected void startLocationUpdates() {
PendingResult<Status> pendingResult = LocationServices.FusedLocationApi.requestLocationUpdates(
mGoogleApiClient, mLocationRequest, this);
Log.d(TAG, "Location update started ..............: ");
}
@Override
public void onConnectionSuspended(int i) {
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
Log.d(TAG, "Connection failed: " + connectionResult.toString());
}
@Override
public void onLocationChanged(Location location) {
Log.d(TAG, "Firing onLocationChanged..............................................");
mCurrentLocation = location;
mLastUpdateTime = DateFormat.getTimeInstance().format(new Date());
updateUI();
}
private void updateUI() {
Log.d(TAG, "UI update initiated .............");
if (null != mCurrentLocation) {
String lat = String.valueOf(mCurrentLocation.getLatitude());
String lng = String.valueOf(mCurrentLocation.getLongitude());
tvLocation.setText("At Time: " + mLastUpdateTime + "\n" +
"Latitude: " + lat + "\n" +
"Longitude: " + lng + "\n" +
"Accuracy: " + mCurrentLocation.getAccuracy() + "\n" +
"Provider: " + mCurrentLocation.getProvider());
} else {
Log.d(TAG, "location is null ...............");
}
}
@Override
protected void onPause() {
super.onPause();
stopLocationUpdates();
}
protected void stopLocationUpdates() {
LocationServices.FusedLocationApi.removeLocationUpdates(
mGoogleApiClient, this);
Log.d(TAG, "Location update stopped .......................");
}
@Override
public void onResume() {
super.onResume();
if (mGoogleApiClient.isConnected()) {
startLocationUpdates();
Log.d(TAG, "Location update resumed .....................");
}
}
}
LocationListener обеспечивает обратный вызов для изменения местоположения через onLocationChanged.
GoogleApiClient.ConnectionCallbacks обеспечивает обратный вызов для GoogleApiClient onConnected.
GoogleApiClient.OnConnectionFailedListener обеспечивает обратный вызов для GoogleApiClient onConnectionFailed.
Источник:http://javapapers.com/android/android-location-fused-provider/
- 1. [Android] Как установить текущее местоположение объекта местоположения одним нажатием кнопки?
- 2. Как я могу отменить задачу ExecutorService одним нажатием кнопки?
- 3. Как увеличить яркость и изменить активность сразу одним нажатием кнопки?
- 4. Подсчет одним нажатием кнопки
- 5. Удаление макета одним нажатием кнопки
- 6. Android: запуск рекламы одним нажатием кнопки
- 7. Создайте переменную одним нажатием кнопки
- 8. Android: откройте сайт одним нажатием кнопки
- 9. Как сделать кнопки одним нажатием кнопки событие
- 10. [Android] Как динамически добавлять кнопки изображения одним нажатием кнопки?
- 11. изменение текста одним нажатием кнопки
- 12. Создайте divs одним нажатием кнопки
- 13. Как сделать texField открытым одним нажатием кнопки?
- 14. Как выполнить задачу одним нажатием кнопки?
- 15. Принимая ввод одним нажатием кнопки
- 16. отображение данных одним нажатием кнопки
- 17. Как открыть фрагмент одним нажатием кнопки?
- 18. Как я могу получить свое местоположение? [Android]
- 19. Как сделать document.write() одним нажатием кнопки
- 20. Создайте кнопку одним нажатием кнопки
- 21. Изменение панелей одним нажатием кнопки
- 22. Как изменить свой JTextField одним нажатием кнопки
- 23. Как заполнить все listViews одним нажатием кнопки?
- 24. Как отправить автоматическое письмо одним нажатием кнопки?
- 25. Как перезапустить SWF одним нажатием кнопки?
- 26. Как ограничить высоту ListView одним нажатием кнопки
- 27. Как открыть несколько окон одним нажатием кнопки?
- 28. Как называть bool одним нажатием кнопки
- 29. Как я могу обновить div нажатием кнопки?
- 30. Как я могу инициировать вызов нажатием кнопки?
Как бы я назвать это от моего MainActivity получить местоположение, когда моя кнопка нажата? –
Проверьте связь внимательно, вы узнаете, как ее использовать. Также он вызывается нажатием кнопки на нем. Просто реализуйте эти методы в своем mainActivity 'public class MainActivity extends Activity реализует LocationListener, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener' – Abhishek
Будет ли это лучший способ сделать это, если я планирую использовать это при нескольких действиях? –