--:-- LUA API

通知

notify / notify_cancel / notify_list / launch_reason

アプリを閉じた後でも、時間が経った・決まった時刻になった・電池が減った、といった条件で通知を出せます。 条件を見張るのはOSです。Luaアプリは閉じるとスクリプトごと消えるので、アプリ側は予約するだけです (Luaのコードで判定する条件は使えません)。

通知は画面上部のトースト(約5秒)と通知音で知らせ、通知センター(ステータスバーをタップ、またはランチャの「通知」)に残ります。 タップすると送ったアプリが開き、pico.launch_reason() で「どの通知から開かれたか」が分かります。

通知を使うには app.cfg に permission_notify=true が要ります(権限モデル)。

pico.notify

pico.notify(t: table) -> id: integer | nil, err: string
pico.notify{ title = "できました", body = "変換が終わりました" }            -- すぐ出す(0が返る)
local id = pico.notify{ title = "休憩", delay_ms = 25 * 60 * 1000, tag = "pomodoro" }
pico.notify{ title = "おはよう", daily = "07:30" }
pico.notify{ title = "締め切り", at = { year = 2026, month = 10, day = 3, hour = 9, min = 0 } }
pico.notify{ title = "水を飲む", every_ms = 60 * 60 * 1000, sound = false }
pico.notify{ title = "電池が少ない", when = "battery_low", below = 15 }
フィールド説明
title必須。タイトル(48バイト=日本語16文字まで。超えた分は切れる)
body本文(96バイトまで)
tag同じアプリ・同じtagの予約/通知は置き換えになる(二重登録を防ぐ)。notify_cancel(tag) でも使う(24バイトまで)
dataタップで開かれたときに launch_reason() で受け取る値(24バイトまで)
soundfalse で通知音を鳴らさない(既定 true)

いつ出すかは次のどれか1つ(無ければすぐ出す)。2つ以上指定するとエラーです。

フィールド説明予約は
delay_ms今からN ms後1回出したら消える。再起動で消える
at日時。エポック秒か {year=, month=, day=, hour=, min=, sec=}(現地時刻、hour以降は省略時0)1回出したら消える。時計が合う(NTP同期)まで待ち、過ぎていれば同期した時点で出す
daily毎日 "HH:MM"残る
every_msN msごと(10000以上)残る
when"battery_low"(電池が below%未満になったとき。既定15。5%以上戻るまで次は出さない) / "wifi_connected" / "wifi_disconnected"(つながった/切れた瞬間)残る

delay_ms 以外の予約はSDに保存され、再起動しても残ります。

戻り値は予約のid(すぐ出した場合は 0)。次の場合は nil と理由が返ります(エラーにはなりません):

  • 権限(permission_notify)が無い
  • このアプリの予約が上限(4件)。OS全体の予約の表(16件)が満杯

引数の型・書式の誤り(titleが無い、dailyが"HH:MM"でない、知らないwhen等)はエラーになります。

pico.notify_cancel

pico.notify_cancel([id_or_tag]) -> count: integer

予約を取り消し、取り消した件数を返します。引数無しで自分の予約を全部、整数ならそのid、文字列ならそのtagの予約を取り消します。 他のアプリの予約は取り消せません。

pico.notify_list

pico.notify_list() -> list: table

自分の予約を { {id=, tag=, title=, kind=}, ... } で返します。kind は "delay" "at" "daily" "every" "battery_low" "wifi_connected" "wifi_disconnected"。

pico.launch_reason

pico.launch_reason() -> tag: string, data: string | nil

通知をタップして開かれたとき、その通知の tag と data を返します。それ以外(ランチャから開いた、pop() で戻ってきた)は nil。

PC/Web版を、開くアプリと画面を指定して起動したとき(--app 名前 --scene 画面、Webは ?app=名前&scene=画面)は、tag が "scene"、data がその画面の名前になります。画面写真を撮るときに、撮りたい画面まで自分で進むのに使えます。

local tag, data = pico.launch_reason()
if tag == "pomodoro" then
    -- タイマーの画面から始める
end

見せ方

通知センターの下のボタンで、利用者が 通常 / 控えめ(トーストも音も出さず、ステータスバーの印と通知センターだけ)と 音あり / 音なし を切り替えられます。ゲームボーイの画面の間は、トーストと音を自動で控えます。