0
I have this code and at the moment I need to pass a latitude and longitude to receive on the map and show the current position the user is in, the problem is that when passing to the Intent of the map the onLocationChanged stops being executed and does not update the position, only returning to the MainActivity it runs again by updating the coordinates.
I would like to know how to leave this activity constantly updating the other activity, so having a GPS in real time shown on the map.
import android.content.pm.PackageManager;
import android.location.GpsSatellite;
import android.location.GpsStatus;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.content.Intent;
import android.Manifest;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.maps.model.LatLng;
public class MainActivity extends AppCompatActivity 
    implements View.OnClickListener, LocationListener, GpsStatus.Listener {
    private LocationManager locManager; //Gerente de Localização
    private LocationProvider locProvider; //Provedor de Localização
    private static final int REQUEST_LOCATION = 2; //Utilizado nas requisições de localização
    Intent map;
    LatLng Local;
    //Inicializado aqui para não dar crash caso o mapa seja 
    //chamado antes desses atributos serem inicializados.
    double latitude = 0;
    double longitude = 0;
    //Pacote onde será armazenado o valor do LatLng.
    Bundle args = new Bundle();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //Instância dos buttons:
        Button map = (Button)findViewById(R.id.button_map);
        map.setOnClickListener(this);
        Button gnss = (Button)findViewById(R.id.button_gnss);
        gnss.setOnClickListener(this);
        Button config = (Button)findViewById(R.id.button_config);
        config.setOnClickListener(this);
        Button credits = (Button)findViewById(R.id.button_credits);
        credits.setOnClickListener(this);
        //Fim Instância dos Buttons
        //O Gerente recebe uma location
        locManager = (LocationManager)getSystemService(LOCATION_SERVICE);
    }
    @Override
    public void onClick(View view){
        switch(view.getId()){
            case R.id.button_map:
                Local = new LatLng(latitude, longitude);
                //Pacote inicializado com o LatLng
                args.putParcelable("Latlng", Local);
                //Criar tela relativa ao mapa
                map = new Intent(this, MapsActivity.class);
                //O pacote é passado para a Intent referente ao mapa
                map.putExtra("bundle", args);
                startActivity(map);
                break;
            case R.id.button_gnss:
               /*Intent gnss = new Intent(this, GnssActivity.class);
                startActivity(gnss);
                */
                break;
            case R.id.button_config:
                Intent config = new Intent(this, SettingsActivity.class);
                startActivity(config);
                break;
            case R.id.button_credits:
                Intent credits = new Intent(this, CreditsActivity.class);
                startActivity(credits);
                break;
        }
    }
    @Override
    protected void onResume(){
        super.onResume();
        if (ActivityCompat.checkSelfPermission(this,
                Manifest.permission.ACCESS_FINE_LOCATION) ==
                PackageManager.PERMISSION_GRANTED) {
            // A permissão foi dada
            ativaGPS();
        }
        else {
            // Solicite a permissão
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                    REQUEST_LOCATION);
        }
    }
    @Override
    protected void onPause() {
        super.onPause();
        desativaGPS();
    }
    public void onRequestPermissionsResult(int requestCode, 
            String[] permissions, int[] grantResults) {
        if (requestCode == REQUEST_LOCATION) {
            if(grantResults.length == 1 && grantResults[0] ==
                    PackageManager.PERMISSION_GRANTED) {
                // O usuário acabou de dar a permissão
                ativaGPS();
            }
            else {
                // O usuário não deu a permissão solicitada
                Toast.makeText(this, "Sua localização não será mostrada",
                    Toast.LENGTH_SHORT).show();
                        finish();
            }
        }
    }
    //Ativa o GPS
    public void ativaGPS() {
        try {
            locProvider = locManager.getProvider(LocationManager.GPS_PROVIDER);
            locManager.requestLocationUpdates(locProvider.getName(), 30000, 1, this);
        } catch (SecurityException e) {
            e.printStackTrace();
        }
    }
    //Desativa o GPS
    public void desativaGPS() {
        try {
            locManager.removeUpdates(this);
        } catch (SecurityException e) {
            e.printStackTrace();
        }
    }
    public void onGpsStatusChanged(int event) {
        // Alguma mudança no sistema GPS
        // A aplicação deverá chamar o método da classe LocationManager para 
        // obter   informações sobre o status do distema GPS.
        TextView coords=(TextView)findViewById(R.id.text_view_coords);
        String satInfo="PRN;Azimute;Elevação;SNR;Used in Fix\n";
        try {
            GpsStatus gpsStatus=locManager.getGpsStatus(null);
        } catch (SecurityException e) {
            e.printStackTrace();
        }
        if (ActivityCompat.checkSelfPermission(this,
                Manifest.permission.ACCESS_FINE_LOCATION) ==
                PackageManager.PERMISSION_GRANTED) {
                    GpsStatus gpsStatus = locManager.getGpsStatus(null);
                    Iterable<GpsSatellite> sats=gpsStatus.getSatellites();
                     for (GpsSatellite sat:sats) {
                        // processe as informações de cada satélite
                     }
                }
        // Informações do sistema estão encapsuladas no objeto gpsStatus
        // Alguma mudança no sistema GPS
        // Informações do sistema estão encapsuladas no objeto gpsStatus
    }
    //Métodos criados automaticamente na implementação do Location Listener !
    @Override
    public void onLocationChanged(Location location) {
        TextView coords=(TextView)findViewById(R.id.text_view_coords);
        latitude=location.getLatitude();
        longitude=location.getLongitude();
        //Cordenadas em DD
        coords.setText("Latitude"+latitude +"\n"+"Longitude:"+longitude);
        /*coords.setText("Latitude:"+Location.convert(latitude,Location.FORMAT_SECONDS)
                +"\n" +
                "Longitude:"+Location.convert(longitude,Location.FORMAT_SECONDS)); */
        //Passar o Bundle referente ao LatLng criado anteriormente.
    }
    @Override
    public void onStatusChanged(String s, int i, Bundle bundle) {
    }
    @Override
    public void onProviderEnabled(String s) {
    }
    @Override
    public void onProviderDisabled(String s) {
    }
    // FIM dos Métodos criados automaticamente na implementação do Location Listener !
}
-----------------------------MAP ACTIVITY--------------------------------------
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
    private GoogleMap mMap;
    double latitude;
    double longitude;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
        Bundle bundle = getIntent().getParcelableExtra("bundle");
        LatLng objLatLng = bundle.getParcelable("Latlng");
        latitude = objLatLng.latitude;
        longitude= objLatLng.longitude;
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }
    @Override
    public void onMapReady(GoogleMap googleMap) {
        float zoomLevel = 16.0f;
        mMap = googleMap;
        //Posição atual marcada no mapa referentes a marcação e setagem da 
        //posição atual na API do Google Maps
        LatLng posAtual = new LatLng(latitude, longitude);
        mMap.addMarker(new MarkerOptions().position(posAtual).title("Sua posição atual!"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(posAtual));
        //This goes up to 21
        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(posAtual, zoomLevel));
    }
}
Related (duplicate?)How to get the current location of android device?
– ramaral