Android: Check if Location Services Enabled using Fused Location Provider

前端 未结 5 781
囚心锁ツ
囚心锁ツ 2021-01-31 10:59

According to the Android documentation:

The Google Location Services API, part of Google Play Services, provides a more powerful, high-level framework t

5条回答
  •  半阙折子戏
    2021-01-31 11:21

    This android developer training tutorial could help - here's the basics:

    Code to run in your Activity onCreate():

     // Create an instance of GoogleAPIClient.
        if (mGoogleApiClient == null) {
            mGoogleApiClient = new GoogleApiClient.Builder(this)
                    .addConnectionCallbacks(this)
                    .addOnConnectionFailedListener(this)
                    .addApi(LocationServices.API)
                    .build();
        }
    
        mGoogleApiClient.connect();
    
        LocationRequest mLocationRequest = new LocationRequest();
        mLocationRequest.setInterval(10000);
        mLocationRequest.setFastestInterval(5000);
        mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    
        LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
                .addLocationRequest(mLocationRequest);
    
        PendingResult result =
                LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient, builder.build());
    
        result.setResultCallback(new ResultCallback() {
            @Override
            public void onResult(LocationSettingsResult locationSettingsResult) {
    
                final Status status = locationSettingsResult.getStatus();
                final LocationSettingsStates LS_state = locationSettingsResult.getLocationSettingsStates();
                switch (status.getStatusCode()) {
                    case LocationSettingsStatusCodes.SUCCESS:
                        // All location settings are satisfied. The client can initialize location
                        // requests here.
    
                        break;
                    case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                        // Location settings are not satisfied. But could be fixed by showing the user
                        // a dialog.
                        try {
                            // Show the dialog by calling startResolutionForResult(),
                            // and check the result in onActivityResult().
                            status.startResolutionForResult(LocationByGPS.this, REQUEST_CHECK_SETTINGS);
    
                        } catch (IntentSender.SendIntentException e) {
                            // Ignore the error.
                        }
                        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.
    
                        break;
                }
            }
        });
    

    Override this Method:

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        final LocationSettingsStates states = LocationSettingsStates.fromIntent(data);
        switch (requestCode) {
            case REQUEST_CHECK_SETTINGS:
                switch (resultCode) {
                    case Activity.RESULT_OK:
                        // All required changes were successfully made
                        GetUserLocation();//FINALLY YOUR OWN METHOD TO GET YOUR USER LOCATION HERE
                        break;
                    case Activity.RESULT_CANCELED:
                        // The user was asked to change settings, but chose not to
    
                        break;
                    default:
                        break;
                }
                break;
        }
    }
    

    Remember to Implement these in your class:

    public class MyClass extends AppCompatActivity implements
        ActivityCompat.OnRequestPermissionsResultCallback,
        GoogleApiClient.ConnectionCallbacks,
        GoogleApiClient.OnConnectionFailedListener{
    
      protected static final int REQUEST_CHECK_SETTINGS = 0x1;
    
    
      /* 
         your code i.e. with the above code etc....
     */
    
     }
    

    Good explanation here in this Google developer link.

    Cheers!

提交回复
热议问题