Si ejecuto obtenerCoordenadas() en el hilo principal, funciona bien (obtengo las coordenadas incluso cuando se cambia de posicion),
Si ejecuto runThread() solo, funciona bien
Si ejecuto obtenerCoordenadas dentro de runThread(), no funciona se bloquea y se sale.
¿Como puedo adaptar el código obtenerCoordenadas para que me funcione dentro de runThread? y así obtener las coordenadas en un hilo aparte al principal.
Quiero obterner las coordenadas en un hilo secundario, porque si las obtengo en el principal y las coordenadas cambian muy rapido se bloquea la aplicación
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // obtenerCoordenadas(); runThread(); } private void runThread() { new Thread(new Runnable() { @Override public void run() { obtenerCoordenadas(); //Inicio actualizacion hilo principal runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(), "Coordenadas: " +latitude+" "+longitude, Toast.LENGTH_LONG).show(); } }); //Fin actualizacion hilo principal } }).start(); } public void obtenerCoordenadas() { if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, 123); } latlon = (LocationManager) getSystemService(Context.LOCATION_SERVICE); Location loca = latlon.getLastKnownLocation(LocationManager.GPS_PROVIDER); if (loca != null) { Toast.makeText(getApplicationContext(),"A-lat: "+loca.getLatitude()+" \n A-lon: "+loca.getLongitude()+" \n ALT: ", Toast.LENGTH_SHORT ).show(); } LocationListener locationListener; locationListener = new LocationListener() { @Override public void onLocationChanged(Location location) { latitude = location.getLatitude(); longitude = location.getLongitude(); } @Override public void onStatusChanged(String provider, int status, Bundle extras) { LocationListener.super.onStatusChanged(provider, status, extras); } @Override public void onProviderEnabled(@NonNull String provider) { LocationListener.super.onProviderEnabled(provider); } @Override public void onProviderDisabled(@NonNull String provider) { LocationListener.super.onProviderDisabled(provider); } }; latlon.requestLocationUpdates(LocationManager.GPS_PROVIDER,5000,100,locationListener); }