Device location (GPS / network) for apps built with Mob — extracted from mob core as a plugin.

iOS: CLLocationManager. Android: FusedLocationProviderClient.

Installation

# mix.exs
{:mob_location, "~> 0.1"}

# mob.exs
config :mob, :plugins, [:mob_location]

The plugin manifest merges NSLocationWhenInUseUsageDescription (iOS) and ACCESS_FINE_LOCATION / ACCESS_COARSE_LOCATION (Android) into the host app at build time, and registers the :location permission capability — request it via Mob.Permissions.request(socket, :location) before use.

Usage

socket = MobLocation.get_once(socket)                     # single fix, then stop
socket = MobLocation.start(socket, accuracy: :balanced)   # continuous updates
socket = MobLocation.stop(socket)                         # save battery

def handle_info({:location, %{lat: lat, lon: lon, accuracy: acc, altitude: alt}}, socket), do: ...
def handle_info({:location, :error, reason}, socket), do: ...

accuracy: is :high | :balanced | :low (default :balanced). Error reason atoms: :permission_denied (user denied or revoked :location) and :unavailable (the OS can't get a fix right now).

License

MIT