2017-09-07 4 views
0

J'ai une activité qui utilise la méthode onLocationChanged et lors de l'exécution d'une requête d'analyse, elle crée un toast. Ça fonctionne bien. Cependant, quand je vais à une autre activité (c'est une activité de cartes), si je change les coordonnées (j'utilise un émulateur) le toast apparaît. Je voudrais savoir pourquoi la méthode onLocationChanged est toujours en cours d'exécution. Je pensais que cela pouvait être dû au contexte, mais j'ai spécifié l'activité dans le domaine du contexte.La méthode onLocationChanged est toujours en cours d'exécution Activité différente

locationManager = (LocationManager) DriverChoicesActivity.this.getSystemService(Context.LOCATION_SERVICE); 
locationListener = new LocationListener() { 
     @Override 
     public void onLocationChanged(final Location location) { 
      final ParseGeoPoint parseGeoPoint = new ParseGeoPoint(location.getLatitude(), location.getLongitude()); 
      ParseQuery<ParseUser> query = ParseUser.getQuery(); 
      query.whereEqualTo("username", ParseUser.getCurrentUser().getUsername()); 
      query.findInBackground(new FindCallback<ParseUser>() { 
       @Override 
       public void done(List<ParseUser> objects, ParseException e) { 
        if (e == null && objects.size() > 0) { 
         for (ParseObject object : objects) { 
          object.put("driverLocation", parseGeoPoint); 
          object.saveInBackground(); 
          Toast.makeText(DriverChoicesActivity.this, "User found", Toast.LENGTH_SHORT).show(); 
         } 
        } 
       } 
      }); 

      updateRequestList(location); 

     } 
     @Override 
     public void onStatusChanged(String provider, int status, Bundle extras) { 
     } 
     @Override 
     public void onProviderEnabled(String provider) { 
     } 
     @Override 
     public void onProviderDisabled(String provider) { 
     } 
}; 

Tout ce qui est dans onCréer l'activité d'origine (DriverChoicesActivity.class). L'autre activité (DriverMapActivity.class) n'a pas de code à l'exception de l'obtention de l'intention de cette activité pour collecter des points de latitude et de longitude. Voici le code qui rend l'objet (également dans onCreate)

requestListView.setAdapter(arrayAdapter); 
requestListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

      if (requestLatitude.size() > position && requestLongitude.size() > position) { 
       if (Build.VERSION.SDK_INT < 23 || ContextCompat.checkSelfPermission(DriverChoicesActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { 
        Location getLastKnownLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
        if (getLastKnownLocation != null) { 
         Intent intent = new Intent(getApplicationContext(), DriverMapActivity.class); 
         intent.putExtra("requestLatitude", requestLatitude.get(position)); 
         intent.putExtra("requestLongitude", requestLongitude.get(position)); 
         intent.putExtra("driverLatitude", getLastKnownLocation.getLatitude()); 
         intent.putExtra("driverLongitude", getLastKnownLocation.getLongitude()); 
         startActivity(intent); 
        } 
       } 
      } 
     } 
}); 

Je suppose que mon problème est avec le contexte d'une certaine manière. Si quelqu'un pourrait être assez aimable pour expliquer.

Merci

Répondre

1

Vous devez ajouter:

locationManager.removeUpdates(listener);

Avant de passer à l'activité suivante.

et

LocationManager locationManager; 
LocationListener locationListener; 

sur le dessus, en classe declaraction

+1

Parfait, merci – CodeNovice