2017-09-07 29 views
0

我有一個使用onLocationChanged方法的活動,並且在執行分析查詢時,它會做一個敬酒。它工作正常。然而,當我去另一個活動(這是一個地圖活動)時,如果我改變了座標(我正在使用模擬器),彈出了Toast。我想知道爲什麼onLocationChanged方法仍在運行。我認爲這可能是由於上下文,但我指定在上下文領域的活動。onLocationChanged方法仍然運行在不同的活動

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) { 
     } 
}; 

所有在原始活動(DriverChoicesActivity.class)的onCreate內。其他活動(DriverMapActivity.class)除了從此活動獲取一些經緯度點的意圖外,沒有任何代碼。這裏是使意圖的代碼(也在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); 
        } 
       } 
      } 
     } 
}); 

我假設我的問題與上下文有關。如果有人可以善意解釋。

謝謝

回答

1

您必須添加:

locationManager.removeUpdates(listener);

在轉到下一個活動之前。

LocationManager locationManager; 
LocationListener locationListener; 
頂部

,類declaraction下

+1

完美,謝謝 – CodeNovice

相關問題