Comment cela fonctionne - requestLocationUpdates() + LocationRequest/Écouteur
Je suis nouveau Android coder et j'ai un problème avec la demande de mises à jour pour ma localisation.
Je travail avec des tutoriels de http://developer.android.com/training/location/receive-location-updates.html .
Mon application peut gérer les exceptions, l'obtention de la latitude et de la longitute correctement, et geocoder peut gérer l'affichage de l'adresse. Mais je demande pour l'emplacement qu'une seule fois, ou lors de modifications de l'emplacement. Je voudrais faire des intervalles de temps. Pour l'instant j'ai commencé la mise en œuvre du code à partir de la liste des tutoriels et ça ressemble à ça:
public class MainActivity extends Activity implements
GooglePlayServicesClient.ConnectionCallbacks,
GooglePlayServicesClient.OnConnectionFailedListener,
LocationListener {
private static final int MILLISECONDS_PER_SECOND = 1000;
public static final int UPDATE_INTERVAL_IN_SECONDS = 5;
private static final long UPDATE_INTERVAL =
MILLISECONDS_PER_SECOND * UPDATE_INTERVAL_IN_SECONDS;
private static final int FASTEST_INTERVAL_IN_SECONDS = 1;
private static final long FASTEST_INTERVAL =
MILLISECONDS_PER_SECOND * FASTEST_INTERVAL_IN_SECONDS;
private TextView tvStatus;
private TextView tvLatitude;
private TextView tvLongitude;
LocationRequest mLocationRequest;
LocationClient mLocationClient;
Location mCurrentLocation;
boolean bNetworkEnabled;
boolean bGPSEnabled;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvStatus = (TextView)findViewById(R.id.tvStatus);
tvLatitude = (TextView)findViewById(R.id.tvLatitude);
tvLongitude = (TextView)findViewById(R.id.tvLongitude);
mLocationRequest = LocationRequest.create();
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mLocationRequest.setInterval(UPDATE_INTERVAL);
mLocationRequest.setFastestInterval(FASTEST_INTERVAL);
mLocationClient = new LocationClient(this, this, this);
checkProviders();
}
Il y a donc déjà des intervalles de mise en œuvre et de la demande de localisation. Mais dans le lien que j'ai donné avant il y a un commentaire que je devrais utiliser quelque part requestLocationUpdates()
(probablement onCreate()
, onStart()
et le retrait de la demande sur onStop()
), mais j'ai un problème avec elle. Donc, Eclipse me montre 3 méthodes:
requestLocationUpdates(LocationRequest request, LocationListener listener)
requestLocationUpdates(LocationRequest request, PendingIntent CallbackIntent)
requestLocationUpdates(LocationRequest request, LocationListener listener, Looper looper)
Donc le premier que je pense est le plus juste à cet endroit. Que dois-je placer dans LocationListener
logement? Je demande de l'aide avec peu d'explication de la façon dont il fonctionne.
Vous devez vous connecter pour publier un commentaire.
Vous êtes à la mise en œuvre: LocationListener dans votre activité MainActivity. L'appel simultanées dans l'emplacement des mises à jour va donc être comme ceci:
Assurez-vous que l': LocationListener vous êtes à la mise en œuvre est à partir de l'api de google, c'est de l'importer:
et non pas de ce:
et il devrait fonctionner très bien.
Il est aussi important que la LocationClient est vraiment connecté avant de le faire. Je vous suggère de ne pas l'appeler dans le onCreate ou onStart méthodes, mais dans onResume. C'est expliqué assez bien dans le tutoriel pour Google Api location: https://developer.android.com/training/location/index.html
requestLocationUpdates
sera de retour l'Emplacement de la PendingIntent mais où puis-je accéder à l'retourné emplacement?J'utilise celui-ci:
Par exemple, à l'aide d'un 1s intervalle:
le temps est exprimé en millisecondes, la distance en mètres.
Automatiquement les appels:
J'ai aussi eu ces incluse dans le script mais il n'a pas eu recours:
En bref: