0

I do not understand why my application does not enter my onRequestPermissionsResult method. How can I do to ask for GPS permission and wait for the result? If I delete "while (requestPermissionDialog);" the app calls ActivityCompat.requestPermissions () method all time.

public class MainActivity extends AppCompatActivity {
    private TextView posicion_text;
    private AlertDialog.Builder dialog;
    static final int My_GPS_Request_Code=1;
    private AlertDialog alert;
    private boolean requestPermissionDialog=false;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        posicion_text = findViewById(R.id.posicion);
        this.dialog = new AlertDialog.Builder(this).setTitle("Permisos de GPS").setMessage("Los permisos de gps son "+"completamente necesarios para el uso de esta aplicación, si no aceptas los permisos la aplicación no funcionará");    
//dialog.setCancelable(false);
        dialog.setNegativeButton("Regresar", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int whichButton) {
                finish();
            }
        });
        alert = dialog.create();

    }
    @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[],int grantResults[])
    {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == My_GPS_Request_Code) {
            requestPermissionDialog=false;
        }
    }
    private void verifyPermission(){
        int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION);
        if (permissionCheck == PackageManager.PERMISSION_DENIED) {//Verifica si se tienen los permisos de GPS
            if(ActivityCompat.shouldShowRequestPermissionRationale(this,Manifest.permission.ACCESS_FINE_LOCATION)){
                dialog.show();
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, My_GPS_Request_Code);
            }
            else{
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, My_GPS_Request_Code);
            }
            requestPermissionDialog=true;
        }
    }
    @Override
    protected void onResume() {
        super.onResume();
        verifyPermission();
        while(requestPermissionDialog);
        LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
        LocationListener locationListener = new LocationListener() {
            public void onLocationChanged(Location location) {
                // Called when a new location is found by the network location provider.
                posicion_text.setText("" + location.getLatitude() + "" + location.getLongitude());
            }

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

            public void onProviderEnabled(String provider) {
            }

            public void onProviderDisabled(String provider) {
            }
        };

    }
  • Can you please confirm that the necessary permissions have been added to the manifest: [GPS Permissions](https://stackoverflow.com/questions/21358392/android-location-permissions) – Elletlar Jul 19 '18 at 11:46
  • Why is there a loop at all? Add the location listener when you get the `onRequestPermissionsResult` callback. Don't block any threads by looping. – Michael Jul 19 '18 at 11:51

0 Answers0