Packages
mob
0.5.17
0.7.20
0.7.19
0.7.18
0.7.17
0.7.16
0.7.15
0.7.14
0.7.13
0.7.12
0.7.11
0.7.10
0.7.9
0.7.8
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.26
0.6.25
0.6.24
0.6.23
0.6.22
0.6.21
0.6.20
0.6.19
0.6.18
0.6.17
0.6.16
0.6.15
0.6.14
0.6.13
0.6.12
0.6.11
0.6.10
0.6.9
0.6.8
0.6.7
0.6.6
0.6.5
0.6.2
0.6.1
0.6.0
0.5.18
0.5.17
0.5.16
0.5.15
0.5.14
0.5.11
0.5.10
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.0
0.3.10
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.0
0.1.0
BEAM-on-device mobile framework for Elixir
Current section
Files
Jump to
Current section
Files
lib/mob/scanner.ex
defmodule Mob.Scanner do
@moduledoc """
QR code and barcode scanner.
Requires `:camera` permission (request via `Mob.Permissions.request/2`).
Opens a full-screen camera preview. When a code is detected the view dismisses
automatically and the result is delivered to `handle_info`:
handle_info({:scan, :result, %{type: :qr, value: "https://..."}}, socket)
handle_info({:scan, :cancelled}, socket)
iOS: `AVCaptureMetadataOutput`. Android: `CameraX` + ML Kit `BarcodeScanning`.
> **Android dependency:** add to `app/build.gradle`:
> `implementation 'com.google.mlkit:barcode-scanning:17.2.0'`
> `implementation 'androidx.camera:camera-camera2:1.3.0'`
> `implementation 'androidx.camera:camera-lifecycle:1.3.0'`
> `implementation 'androidx.camera:camera-view:1.3.0'`
"""
@type format ::
:qr
| :ean13
| :ean8
| :code128
| :code39
| :upca
| :upce
| :pdf417
| :aztec
| :data_matrix
@doc """
Open the barcode scanner.
Options:
- `formats: [format]` — list of barcode formats to detect (default `[:qr]`)
"""
@spec scan(Mob.Socket.t(), keyword()) :: Mob.Socket.t()
def scan(socket, opts \\ []) do
formats = Keyword.get(opts, :formats, [:qr]) |> Enum.map(&Atom.to_string/1)
formats_json = :json.encode(formats)
:mob_nif.scanner_scan(formats_json)
socket
end
end