code: def start(cls, callback, provider='gps', min_time=1000, min_distance=0):
          
          app = AndroidApplication.instance()
          f = app.create_future()
  
          def on_success(lm):
              #: When we have finally have permission
              lm.onLocationChanged.connect(callback)
  
              #: Save a reference to our listener
              #: because we may want to stop updates
              listener = LocationManager.LocationListener(lm)
              lm.listeners.append(listener)
  
              lm.requestLocationUpdates(provider, min_time, min_distance,
                                        listener)
              app.set_future_result(f, True)
  
          def on_perm_request_result(allowed):
              #: When our permission request is accepted or decliend.
              if allowed:
                  LocationManager.get().then(on_success)
              else:
                  #: Access denied
                  app.set_future_result(f, False)
  
          def on_perm_check(allowed):
              if allowed:
                  LocationManager.get().then(on_success)
              else:
                  LocationManager.request_permission(
                      fine=provider == 'gps').then(on_perm_request_result)
  
          #: Check permission
          LocationManager.check_permission(
              fine=provider == 'gps').then(on_perm_check)
  
          return f
docs: Convenience method that checks and requests permission if necessary
          and if successful calls the callback with a populated `Location` 
          instance on updates.
  
          Note you must have the permissions in your manifest or requests 
          will be denied immediately.