How to turn on the GPS on Android

后端 未结 7 609
[愿得一人]
[愿得一人] 2020-12-08 08:52

I am developing an android app which needs to activate the GPS.

I read a lot of topics in a lot of forums and the answer I\'ve found is:

it\'

7条回答
  •  -上瘾入骨i
    2020-12-08 09:02

    I think we have more better version to enable the location without opening the settings just like google map works.

    It will looks like this -

    Add Dependency in gradle - compile 'com.google.android.gms:play-services-location:10.0.1'

    public class MapActivity extends AppCompatActivity {
    
        protected static final String TAG = "LocationOnOff";
    
     
        private GoogleApiClient googleApiClient;
        final static int REQUEST_LOCATION = 199;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            this.setFinishOnTouchOutside(true);
    
            // Todo Location Already on  ... start
            final LocationManager manager = (LocationManager) MapActivity.this.getSystemService(Context.LOCATION_SERVICE);
            if (manager.isProviderEnabled(LocationManager.GPS_PROVIDER) && hasGPSDevice(MapActivity.this)) {
                Toast.makeText(MapActivity.this,"Gps already enabled",Toast.LENGTH_SHORT).show();
            }
            // Todo Location Already on  ... end
    
            if(!hasGPSDevice(MapActivity.this)){
                Toast.makeText(MapActivity.this,"Gps not Supported",Toast.LENGTH_SHORT).show();
            }
    
            if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER) && hasGPSDevice(MapActivity.this)) {
                Log.e("TAG","Gps already enabled");
                Toast.makeText(MapActivity.this,"Gps not enabled",Toast.LENGTH_SHORT).show();
                enableLoc();
            }else{
                Log.e("TAG","Gps already enabled");
                Toast.makeText(MapActivity.this,"Gps already enabled",Toast.LENGTH_SHORT).show();
            }
        }
    
    
        private boolean hasGPSDevice(Context context) {
            final LocationManager mgr = (LocationManager) context
                    .getSystemService(Context.LOCATION_SERVICE);
            if (mgr == null)
                return false;
            final List providers = mgr.getAllProviders();
            if (providers == null)
                return false;
            return providers.contains(LocationManager.GPS_PROVIDER);
        }
    
        private void enableLoc() {
    
            if (googleApiClient == null) {
                googleApiClient = new GoogleApiClient.Builder(MapActivity.this)
                        .addApi(LocationServices.API)
                        .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
                            @Override
                            public void onConnected(Bundle bundle) {
    
                            }
    
                            @Override
                            public void onConnectionSuspended(int i) {
                                googleApiClient.connect();
                            }
                        })
                        .addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
                            @Override
                            public void onConnectionFailed(ConnectionResult connectionResult) {
    
                                Log.d("Location error","Location error " + connectionResult.getErrorCode());
                            }
                        }).build();
                googleApiClient.connect();
             }
    
             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);
    
             PendingResult result =
                        LocationServices.SettingsApi.checkLocationSettings(googleApiClient, builder.build());
             result.setResultCallback(new ResultCallback() {
                @Override
                public void onResult(LocationSettingsResult result) {
                    final Status status = result.getStatus();
                    switch (status.getStatusCode()) {
                      case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                           try {
                               // Show the dialog by calling startResolutionForResult(),
                               // and check the result in onActivityResult().
                                    status.startResolutionForResult(MapActivity.this, REQUEST_LOCATION);
                           } catch (IntentSender.SendIntentException e) {
                               // Ignore the error.
                           }
                           break;
                     }
                 }
             });
         }
    
    }
    

提交回复
热议问题