Packages
mob
0.7.2
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/storage/android.ex
defmodule Mob.Storage.Android do
@moduledoc """
Android-specific storage locations and MediaStore integration.
## External files directory
`external_files_dir/1` returns the app's scoped directory on external
storage (`getExternalFilesDir`). This is visible to the user via a file
manager or USB, but scoped to the app — no `WRITE_EXTERNAL_STORAGE`
permission required. Returns `nil` if external storage is unavailable.
Common type atoms: `:documents`, `:pictures`, `:movies`, `:music`,
`:downloads`, `:dcim`. Maps to `Environment.DIRECTORY_*` constants.
## MediaStore
`save_to_media_store/3` inserts a file into the Android media library
so it appears in the Gallery, Music, or Files app. It is asynchronous —
the result arrives via `handle_info`:
handle_info({:storage, :saved_to_library, path}, socket)
handle_info({:storage, :error, :save_to_library, reason}, socket)
`type` is `:image`, `:video`, or `:audio`. On API 29+ no permission is
needed for files the app created. On API 28 and below,
`WRITE_EXTERNAL_STORAGE` is required — add it via:
mix mob.enable media_store
"""
@doc """
Return the app's scoped external storage directory for `type`.
Returns `nil` if external storage is not available on this device.
"""
@spec external_files_dir(atom()) :: String.t() | nil
def external_files_dir(type \\ :documents) do
case :mob_nif.storage_external_files_dir(type) do
nil -> nil
path -> IO.iodata_to_binary(path)
end
end
@doc """
Save a file to the MediaStore so it appears in the system Gallery,
Music, or Files app.
`type` is `:image`, `:video`, or `:audio`. Defaults to `:auto`, which
infers the type from the file extension.
"""
@spec save_to_media_store(Mob.Socket.t(), String.t(), atom()) :: Mob.Socket.t()
def save_to_media_store(socket, path, type \\ :auto) do
:mob_nif.storage_save_to_media_store(path, type)
socket
end
end