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