GPS sensor locking when sensor is off

Asked

Viewed 42 times

-1

I’m making an app that reads GPS coordinates.

When the sensor is on and running, the app pulls the information right, but when the sensor is off, the app hangs when I try to read the coordinates

package com.example.dfabr.primeiroprograma;

import android.Manifest;
import android.content.pm.PackageManager;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import java.io.IOException;
import java.util.List;

public class telaInformacao extends AppCompatActivity implements LocationListener {
        Button btnReceberCoordenadas;
        TextView receberCoordenadas;
        public TextView txtCidade;
        public TextView txtEStado;
        public TextView txtPais;


        private Address endereco;


        double latitude;
        double longitude;

        public static final int PREMISSAO =1;
        Location location = null;


        @Override
        protected void onCreate(Bundle savedInstanceState) {
            getSupportActionBar().hide();
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_tela_informacao);

            btnReceberCoordenadas = (Button)findViewById(R.id.btnReceberCoordenadas);
            receberCoordenadas = (TextView)findViewById(R.id.receberCoordenadas);
            txtCidade = (TextView)findViewById(R.id.txtCidade);
            txtEStado = (TextView)findViewById(R.id.textEstado);
            txtPais = (TextView)findViewById(R.id.textPais);


            btnReceberCoordenadas.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(telaInformacao.this, "Suas Coordenadas Foram Geradas Com Sucesso", Toast.LENGTH_LONG).show();
                    lerCoordenadas();
                }
            });
        }


        private void lerCoordenadas(){
            if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED){
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION},PREMISSAO);
            }else{
                LocationManager locationManager = (LocationManager)getSystemService(LOCATION_SERVICE);
                boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

                if (gps){
                    if (location == null) {
                        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
                        location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
                    }
                    if (location != null){
                        latitude = location.getLatitude();
                        longitude = location.getLongitude();
                        Log.i("Coordenadas", "Latitude: \n" + latitude + "Longitude: \n " + longitude);
                        receberCoordenadas.setText("Latitude: " + latitude + "\n\nLongitude: " + longitude);

                    }
                }else
                    Toast.makeText(telaInformacao.this, "GPS desativado", Toast.LENGTH_LONG).show();
                try {
                    endereco = buscarEndereco(latitude,longitude);
                    txtCidade.setText("Bairro:  " + endereco.getSubLocality());
                    txtEStado.setText("Estado:  " + endereco.getAdminArea());
                    txtPais.setText("Pais:  " + endereco.getCountryName());

                }catch (IOException e){
                    Log.i("GPS", "GPS");
                }
            }
        }
        public Address buscarEndereco(double latitude, double longitude)
                throws IOException {
            Geocoder geocoder;
            Address address = null;
            List<Address> addresses;

            geocoder = new Geocoder(getApplicationContext());

            addresses = geocoder.getFromLocation(latitude, longitude, 1);
            if (addresses.size() > 0) {
                address = addresses.get(0);

            }
            return address;
        }

    /*public void onRequestPermissionResult(int requestCode, @NonNull String[] permission, @NonNull int[] grantresult) {

        switch (requestCode){
            case PREMISSAO:
                    if (permission[0].equalsIgnoreCase(Manifest.permission.ACCESS_FINE_LOCATION) &&
                            grantresult [0] == PackageManager.PERMISSION_GRANTED)
                        lerCoordenadas();
                    }

                    super.onRequestPermissionsResult(requestCode, permission, grantresult);
        }*/

        @Override
        public void onLocationChanged(Location location) {
        }

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

        @Override
        public void onProviderEnabled(String provider) {
        }

        @Override
        public void onProviderDisabled(String provider) {
        }
    }
  • Post the error that appears in Logcat. Another thing, I believe your method onLocationChanged() should do this.location = location;.

1 answer

2

The error is in the LSE because you say you have no gps but still try to load the location on the screen, the code should look like this:

private void lerCoordenadas(){
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED){
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION},PREMISSAO);
        }else{
            LocationManager locationManager = (LocationManager)getSystemService(LOCATION_SERVICE);
            boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

            if (gps){
                if (location == null) {
                    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
                    location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
                }
                if (location != null){
                    latitude = location.getLatitude();
                    longitude = location.getLongitude();
                    Log.i("Coordenadas", "Latitude: \n" + latitude + "Longitude: \n " + longitude);
                    receberCoordenadas.setText("Latitude: " + latitude + "\n\nLongitude: " + longitude);

                try {
                endereco = buscarEndereco(latitude,longitude);
                txtCidade.setText("Bairro:  " + endereco.getSubLocality());
                txtEStado.setText("Estado:  " + endereco.getAdminArea());
                txtPais.setText("Pais:  " + endereco.getCountryName());

                }catch (IOException e){
                Log.i("GPS", "GPS");
                }
                }
            }else
                Toast.makeText(telaInformacao.this, "GPS desativado", Toast.LENGTH_LONG).show();
        }
    }
  • Thank you @Simao Coutinho, gave it right Here.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.