I\'m using a GPS disabled AlertDialog and once the user enables GPS, I move onto another Activity via an Intent. The problem is that the AlertDialog appears and then moves o
It looks like the problem is that while the GPS location isn't enabled, you are still getting a location in myLocation.getLocation.
After you call createGpsDisabledAlert(), you probably should return instead of continuing with the method.
After you show the dialog, createGpsDisabledAlert
will continue on and finish even before you click OK or Cancel. Maybe refactor the rest of the code in OnClickNearMe
to another method and call it only if location isn't enabled, and also call it after your settings page. Maybe something like:
public void OnClickNearMe(View view) {
LocationManager locManager = (LocationManager) getSystemService(LOCATION_SERVICE);
if (!locManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
createGpsDisabledAlert();
} else {
getLocation();
}
}
private void getLocation() {
Location locationResult = null;
MyLocation myLocation = new MyLocation();
boolean locationEnabled = myLocation.getLocation(this, locationResult);
if (locationEnabled == true) {
locationResult = myLocation.getLocationResult();
showResultsScreen(locationResult);
} else {
Toast.makeText(this, R.string.noLoc, Toast.LENGTH_LONG).show();
}
}
private void createGpsDisabledAlert(){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Your GPS is disabled! Would you like to enable it?")
.setCancelable(false)
.setPositiveButton("Enable GPS",
new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int id){
showGpsOptions();
getLocation();
}
});
builder.setNegativeButton("Do nothing",
new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int id){
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}
private void showGpsOptions(){
Intent gpsOptionsIntent = new Intent(
android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(gpsOptionsIntent);
}
private void showResultsScreen(Location locationResult){
Intent resultsIntent = new Intent(this, ResultScreenList.class);
startActivity(resultsIntent);
}
}