Search code examples
androidgpsandroid-alertdialog

android GPS enable when button click


this is my Code. ( it make alertdialog to move Settings) but I just want to enable GPS when I "ENABLE GPS" button click. and Does android alway enable button click when I run app not just run once?

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) {
        moveConfigGPS();
    }
}).setNegativeButton("Do nothing",
new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int id) {
        dialog.cancel();
    }
});

AlertDialog alert = builder.create();
alert.show();

Solution

  • Update:

      /**
     * Check if GPS enabled or not
     * and request dialog to enable GPS.
     */
    private void checkWhetherLocationSettingsAreSatisfied() {
    
        LocationRequest mLocationRequest = LocationRequest.create()
                .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
                .setInterval(1000)
                .setNumUpdates(2);
    
        final LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder().addLocationRequest(mLocationRequest);
        builder.setAlwaysShow(true);
        builder.setNeedBle(true);
        SettingsClient client = LocationServices.getSettingsClient(this);
        Task<LocationSettingsResponse> task = client.checkLocationSettings(builder.build());
        task.addOnSuccessListener(this, new OnSuccessListener<LocationSettingsResponse>() {
            @Override
            public void onSuccess(LocationSettingsResponse locationSettingsResponse) {
                Log.d(TAG, "onSuccess() called with: locationSettingsResponse = [" + locationSettingsResponse + "]");
                hasLocationPermission();
    
            }
        });
        task.addOnFailureListener(this, new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Log.d(TAG, "onSuccess --> onFailure() called with: e = [" + e + "]");
                if (e instanceof ResolvableApiException) {
                    // Location settings are not satisfied, but this can be fixed
                    // by showing the user a dialog.
                    try {
                        // Show the dialog by calling startResolutionForResult(),
                        // and check the result in onActivityResult().
                        ResolvableApiException resolvable = (ResolvableApiException) e;
                        resolvable.startResolutionForResult(BaseActivity.this,
                                Constants.REQUEST_CHECK_SETTINGS);
                    } catch (IntentSender.SendIntentException e) {
    
                        e.printStackTrace();
                    }
                }
    
            }
        });
    }
    
    
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    
        if (requestCode == Constants.REQUEST_CHECK_SETTINGS) {
    
            // Make sure the request was successful
            if (resultCode == RESULT_OK) {
    
                hasLocationPermission();
    
            } else {
                //User clicks No
            }
        }
    
    }
    

    I think you want to turn on GPS location with one click like Google do.

    enter image description here

    To prompt the user for permission to modify the location settings, call startResolutionForResult(Activity, int). This method brings up a dialog asking for the user's permission to modify location settings.