PythonIDE Docs
中文
简体中文

now_playing

锁屏与控制中心的正在播放信息。

锁屏与控制中心「正在播放」元数据:标题、艺术家、封面、进度。配合 soundavplayer 播放自有音频时使用。

边界:只发布元数据到系统 Now Playing 卡片,不替代音频播放本身。未实际播放时卡片可能不出现;远程流媒体优先用 avplayer 自带控制。

#模块概览

说明
导入import now_playing
适合做什么播客/音乐 App 锁屏信息、进度条同步
调用时机开始播放后 set_info;进度变化时 update_elapsed
推荐顺序开始播放 → set_info → 定时/回调 update_elapsed → 结束 clear
封面artwork_path 为本地图片路径,无效则只显示文字

#快速开始

发布元数据并更新进度:

python
import now_playing

try:
    now_playing.set_info(
        title="第一集",
        artist="播客名称",
        album="第一季",
        duration=3600,
        elapsed=120,
        artwork_path="/path/cover.jpg",
    )
    now_playing.update_elapsed(180)
finally:
    now_playing.clear()

#AppUI 示例

元数据发布与进度更新放在按钮回调;配合本地播放时卡片更稳定。

python
import appui
import now_playing

state = appui.State(
    title="PythonIDE 演示",
    artist="播客",
    elapsed="120",
    status="未发布",
)

session = {"elapsed": 120.0, "duration": 3600.0}


def publish_card():
    session["elapsed"] = float(state.elapsed) if state.elapsed else 0.0
    now_playing.set_info(
        title=state.title,
        artist=state.artist,
        duration=session["duration"],
        elapsed=session["elapsed"],
    )
    state.status = "已发布到锁屏卡片"


def advance_progress():
    session["elapsed"] = min(session["elapsed"] + 30, session["duration"])
    state.elapsed = str(int(session["elapsed"]))
    now_playing.update_elapsed(session["elapsed"])
    state.status = f"进度 {int(session['elapsed'])}s"


def clear_card():
    now_playing.clear()
    state.status = "已清除"


def body():
    return appui.NavigationStack(
        appui.Form([
            appui.Section("元数据", [
                appui.TextField("标题", text=state.title),
                appui.TextField("艺术家", text=state.artist),
                appui.TextField("进度(秒)", text=state.elapsed),
            ]),
            appui.Section("控制", [
                appui.Button("发布到锁屏", action=publish_card)
                .button_style("bordered_prominent"),
                appui.Button("进度 +30 秒", action=advance_progress),
                appui.Button("清除", action=clear_card, role="destructive"),
            ]),
            appui.Section("状态", [
                appui.Text(state.status).foreground_color("secondaryLabel"),
            ], footer="需配合 sound/avplayer 实际播放,锁屏卡片才稳定出现。"),
        ]).navigation_title("正在播放")
    )


appui.run(body, state=state)

#API 参考

#速查

API作用
set_info(title, artist='', album='', duration=0, elapsed=0, artwork_path=None, playback_rate=1.0)发布完整元数据
update_elapsed(seconds, playback_rate=1.0)仅更新已播放秒数
clear()清除锁屏卡片信息
NowPlayingError原生能力入口失败异常

#set_info

python
now_playing.set_info(
    title="曲目名",
    artist="歌手",
    album="专辑",
    duration=240.0,
    elapsed=12.0,
    artwork_path="/path/cover.jpg",
    playback_rate=1.0,
)
参数说明
duration / elapsed总时长与当前进度(秒)
artwork_path本地封面图路径,可选
playback_rate播放速率,暂停时可设 0

#update_elapsed / clear

python
now_playing.update_elapsed(95.5)
now_playing.clear()

#常见错误

错误写法后果修正
set_info 不播放音频锁屏卡片可能不出现配合 sound.Playeravplayer
封面路径无效无封面图检查沙盒内文件路径
忘记 clear()停止后仍显示旧信息播放结束或页面关闭时清除
body() 里自动发布每次刷新重复设置放进按钮或播放回调

#相关文档

文档用途
sound本地音频播放
avplayer音视频流播放
audio_session音频会话类别

#预期效果

运行示例后,界面应出现文档描述的目标结果;若与预期不符,先看「失败路径」并按返回值或日志排查。