Turn GPS on programmatically like Ola Cabs Android app

前端 未结 7 878
忘了有多久
忘了有多久 2021-02-04 15:44

I am working on an application and need to integrate GPS location. I want to switch the GPS on programmatically. The condition is: I don\'t want to send the user to the Setting

7条回答
  •  醉话见心
    2021-02-04 16:31

    Here is my 100% working code first add this dependencie compile 'com.google.android.gms:play-services:9.2.1' to your build.gradle(Module: app)

    After that create class with name StartLocationAlert.java and copy this code and paste in this file

    import android.app.Activity;
    import android.content.IntentSender;
    import android.net.wifi.WifiManager;
    import android.os.Bundle;
    import android.support.annotation.NonNull;
    import android.support.annotation.Nullable;
    import android.util.Log;
    import android.widget.Toast;
    
    import com.example.googlemappromt.MainActivity;
    import com.google.android.gms.common.ConnectionResult;
    import com.google.android.gms.common.api.GoogleApiClient;
    import com.google.android.gms.common.api.PendingResult;
    import com.google.android.gms.common.api.ResultCallback;
    import com.google.android.gms.common.api.Status;
    
    import com.google.android.gms.location.LocationRequest;
    import com.google.android.gms.location.LocationServices;
    import com.google.android.gms.location.LocationSettingsRequest;
    import com.google.android.gms.location.LocationSettingsResult;
    import com.google.android.gms.location.LocationSettingsStates;
    import com.google.android.gms.location.LocationSettingsStatusCodes;
    import com.google.android.gms.vision.barcode.Barcode;
    
    
    /**
     * Created by Anirudh on 20/07/16.
     */
    public class StartLocationAlert implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener  {
        Activity context;
        protected static final int REQUEST_CHECK_SETTINGS = 0x1;
        GoogleApiClient googleApiClient;
        public StartLocationAlert(Activity context) {
            this.context = context;
            googleApiClient = getInstance();
            if(googleApiClient != null){
                //googleApiClient.connect();
                settingsrequest();
                googleApiClient.connect();
            }
        }
    
        public  GoogleApiClient getInstance(){
            GoogleApiClient mGoogleApiClient = new GoogleApiClient.Builder(context).addConnectionCallbacks(this).addOnConnectionFailedListener(this).addApi(LocationServices.API).build();
            return mGoogleApiClient;
        }
    
        public void settingsrequest()
        {
            Log.e("settingsrequest","Comes");
    
    
            LocationRequest locationRequest = LocationRequest.create();
            locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
            locationRequest.setInterval(30 * 1000);
            locationRequest.setFastestInterval(5 * 1000);
            LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
                    .addLocationRequest(locationRequest);
            builder.setAlwaysShow(true); //this is the key ingredient
    
            PendingResult result =
                    LocationServices.SettingsApi.checkLocationSettings(googleApiClient, builder.build());
            result.setResultCallback(new ResultCallback() {
                @Override
                public void onResult(LocationSettingsResult result) {
                    final Status status = result.getStatus();
                    final LocationSettingsStates state = result.getLocationSettingsStates();
                    switch (status.getStatusCode()) {
                        case LocationSettingsStatusCodes.SUCCESS:
                            // All location settings are satisfied. The client can initialize location
                            // requests here.
                           // Log.e("Application","Button Clicked");
                            break;
                        case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                            // Location settings are not satisfied. But could be fixed by showing the user
                            // a dialog.
                           // Log.e("Application","Button Clicked1");
                            try {
                                // Show the dialog by calling startResolutionForResult(),
                                // and check the result in onActivityResult().
                                status.startResolutionForResult(context, REQUEST_CHECK_SETTINGS);
                            } catch (IntentSender.SendIntentException e) {
                                // Ignore the error.
                                Log.e("Applicationsett",e.toString());
                            }
                            break;
                        case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                            // Location settings are not satisfied. However, we have no way to fix the
                            // settings so we won't show the dialog.
                            //Log.e("Application","Button Clicked2");
                            Toast.makeText(context, "Location is Enabled", Toast.LENGTH_SHORT).show();
                            break;
                    }
                }
            });
        }
    
    
        @Override
        public void onConnected(@Nullable Bundle bundle) {
    
    
        /*    MainActivity mm = new MainActivity();
            mm.requestLocationUpdates();*/
            Toast.makeText(context , "Connected", Toast.LENGTH_SHORT).show();
        }
    
        @Override
        public void onConnectionSuspended(int i) {
    
        }
    
        @Override
        public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
    
        }
    }
    

    Usage of this above class is show below

     @Override
        protected void onResume() {
            super.onResume();
            Activity mContext = MainActivity.this //change this your activity name 
            StartLocationAlert startLocationAlert = new StartLocationAlert(mContext);
    
           requestLocationUpdates();
    
        }
    

    And don't forget to add below permissions in AndroidManifest.xml file or else this might not work properly

     
     
    

    Hope this might help you..

提交回复
热议问题