2016-11-30 2 views
2

В моем приложении для Android мне нужно указать местоположение пользователя, когда он нажимает кнопку. Однако мне не нужно получать постоянные обновления на его месте.Как получить местоположение пользователя только один раз без отслеживания?

Я просмотрел несколько вопросов о stackoverflow, но ответы 2-3 года, поэтому мне было интересно, как на Android SDK сейчас, что это лучший способ сделать это.

Кроме того, я хотел бы получить null в том месте, где это возможно.

Заранее спасибо.

+0

может быть дубликатом http://stackoverflow.com/questions/6694391/android-get-current-location-of-user-without-using-gps-or-internet – sasikumar

+1

этот вопрос был задан 5 лет назад, поэтому ответ может быть устаревшим –

ответ

5

Я знаю, что вопрос старый, но на тот случай, если кто-либо еще должен знать ответ. Вы можете использовать setNumUpdates метод и передать пример значения 1. :

mLocationRequest = new LocationRequest(); 
mLocationRequest.setNumUpdates(1); 
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 

По умолчанию мест постоянно обновляется, пока запрос не будет явно удален, однако вы можете по желанию запросить определенное количество обновлений. Например, если вашему приложению требуется только одно новое место, затем вызовите этот метод со значением 1 перед передачей запроса клиенту местоположения.

https://developers.google.com/android/reference/com/google/android/gms/location/LocationRequest.html#setNumUpdates(int)

0
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 



if (mGoogleApiClient == null) { 
    mGoogleApiClient = new GoogleApiClient.Builder(this) 
     .addConnectionCallbacks(this) 
     .addOnConnectionFailedListener(this) 
     .addApi(LocationServices.API) 
     .build(); 
} 


     protected void onStart() { 
    mGoogleApiClient.connect(); 
    super.onStart(); 
} 

protected void onStop() { 
    mGoogleApiClient.disconnect(); 
    super.onStop(); 
} 



public class MainActivity extends ActionBarActivity implements 
    ConnectionCallbacks, OnConnectionFailedListener { 

@Override 
public void onConnected(Bundle connectionHint) { 
    mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
      mGoogleApiClient); 
    if (mLastLocation != null) { 
     mLatitudeText.setText(String.valueOf(mLastLocation.getLatitude())); 
     mLongitudeText.setText(String.valueOf(mLastLocation.getLongitude())); 
    } 
} 
} 

для дальнейшего использования see here

2

Android ввести плавленый Место в последнем I/O Summit, плавленый место предоставить вам более надежное и точное местоположение с наилучшим доступным провайдером.

import android.location.Location; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

import com.google.android.gms.common.ConnectionResult; 
import com.google.android.gms.common.api.GoogleApiClient; 
import com.google.android.gms.location.LocationListener; 
import com.google.android.gms.location.LocationRequest; 
import com.google.android.gms.location.LocationServices; 

public class MainActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, 
GoogleApiClient.OnConnectionFailedListener, LocationListener { 


    TextView txtOutputLat, txtOutputLon; 
    Location mLastLocation; 
    private GoogleApiClient mGoogleApiClient; 
    private LocationRequest mLocationRequest; 
    String lat, lon; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     GoogleApiClient(); 
    } 


    @Override 
    public void onConnected(Bundle bundle) { 


     mLocationRequest = LocationRequest.create(); 
     mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
     mLocationRequest.setInterval(100); // Update location every second 

     //use if you want location update 
     LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient,    mLocationRequest, this); 

     // here you get current location 
     mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
                      mGoogleApiClient); 
     if (mLastLocation != null) { 
      lat = String.valueOf(mLastLocation.getLatitude()); 
      lon = String.valueOf(mLastLocation.getLongitude()); 

     } 

    } 

    @Override 
    public void onConnectionSuspended(int i) { 

    } 

    @Override 
    public void onLocationChanged(Location location) { 
     lat = String.valueOf(location.getLatitude()); 
     lon = String.valueOf(location.getLongitude()); 

    } 

    @Override 
    public void onConnectionFailed(ConnectionResult connectionResult) { 
     GoogleApiClient(); 
    } 

    synchronized void GoogleApiClient() { 
     mGoogleApiClient = new GoogleApiClient.Builder(this) 
     .addConnectionCallbacks(this) 
     .addOnConnectionFailedListener(this) 
     .addApi(LocationServices.API) 
     .build(); 


    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 
     mGoogleApiClient.connect(); 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     mGoogleApiClient.disconnect(); 
    } 


} 
+2

В качестве примечания, если вы хотите обновлять каждую секунду, 'mLocationRequest.setInterval (100);' на самом деле должно быть 'mLocationRequest.setInterval (1000);' – BlackHatSamurai

+4

Вопрос состоял в том, чтобы получить место только один раз, а не каждую секунду – gonephishing

 Смежные вопросы

  • Нет связанных вопросов^_^