快应用 FeatureFeature API

system.volume 系统音量

获取和设置系统媒体(音乐)音量,并可监听媒体音量的变化。

项目说明
模块名system.volume
Feature 类型标准 Feature
所需权限无

接口声明

{ "name": "system.volume" }

导入方式

// 快应用标准写法
import volume from '@system.volume'
// 或
const volume = require('@system.volume')
// 本仓库运行时/测试中使用的写法
const volume = require('system.volume')

功能概述

system.volume 用于读取/设置系统**媒体流(Music)**音量:getMediaValue 获取当前多媒体音量,setMediaValue 设置当前多媒体音量,音量值在 JS 侧为 0.01.0 的浮点数(Native 内部为 010 的整数音量档,换算关系为 value * 10)。

Native 层通过 multimedia 框架的音频策略接口(media_uv_policy_get/set_stream_volume,libuv 异步)与 media server 通信;Feature 实例创建时还会通过 media_policy_subscribe 订阅音乐流音量变化,系统音量被任何地方修改时通过 onMediaValueChanged 事件通知 JS。

典型使用场景:应用内音量调节条、音量同步显示。可参考 openvela/packages/apps/wearable/vela-sample/src/interface/system/volume/index.ux。

API

volume.setMediaValue(info)

设置当前多媒体(音乐流)音量。回调风格,无 Promise 形式。

参数(info 对象字段)

字段类型必填默认值说明
valuenumber(double)是-设置的音量,范围 0.0~1.0;超出范围返回失败。
successfunction否-回调签名 success(ret: GetRet),ret.value 为设置的音量值。
failfunction否-回调签名 fail(errorMsg: string, code: number)。
completefunction否-回调签名 complete(msg: string),msg 为 "success" 或 "fail"。

成功返回 / success 回调参数

字段类型说明
valuenumber(double)本次设置的音量值(0.0~1.0)

失败回调 fail

  • 参数:(errorMsg: string, code: number)
  • 错误码/错误信息(均由 Native 实现返回):
codeerrorMsg触发条件
202"param is invalid"value 不在 0.0~1.0 范围内
202"volume malloc fail"Native 内部内存分配失败
202"media_uv_policy_set_stream_volume fail"调用音频策略服务设置音量失败
其他(负数)"volume_set_cb failed"媒体服务异步返回设置失败,code 为底层返回值

官方标准文档描述:fail 回调返回通用错误码(openvela 实证的具体错误码/错误信息以上表为准)。

示例

const volume = require('system.volume')

volume.setMediaValue({
  value: 0.5,
  success: function (ret) {
    console.log('设置成功,当前音量:', ret.value)
  },
  fail: function (errorMsg, code) {
    console.log('设置失败:', code, errorMsg)
  },
  complete: function (msg) {
    console.log('complete:', msg)
  }
})

volume.getMediaValue(info)

获取当前多媒体(音乐流)音量。回调风格,无 Promise 形式。

参数(info 对象字段)

字段类型必填默认值说明
successfunction否-回调签名 success(ret: GetRet),ret.value 为当前音量。
failfunction否-回调签名 fail(errorMsg: string, code: number)。
completefunction否-回调签名 complete(msg: string),msg 为 "success" 或 "fail"。

成功返回 / success 回调参数

字段类型说明
valuenumber(double)系统媒体当前音量,0.01.0(Native 010 档位除以 10)

失败回调 fail

  • 参数:(errorMsg: string, code: number)
  • 错误码/错误信息(均由 Native 实现返回):
codeerrorMsg触发条件
202"volume malloc fail"Native 内部内存分配失败
202"media_uv_policy_get_stream_volume failed"调用音频策略服务获取音量失败
-1"volume_get_cb volume invalid"媒体服务返回的音量档不在 0~10 范围内,或异步回调返回失败

示例

const volume = require('system.volume')

volume.getMediaValue({
  success: function (ret) {
    console.log('当前音量:', ret.value)
  },
  fail: function (errorMsg, code) {
    console.log('获取失败:', code, errorMsg)
  }
})

事件

onMediaValueChanged

多媒体音量发生变化时触发(JIDL 中声明为 event onMediaValueChanged(GetRet value))。当系统媒体音量被任何途径修改(本应用设置、其他应用设置、系统控件等)时触发。

赋值方式:把回调函数赋给 volume.onMediaValueChanged 即可监听;赋为 null 取消监听(Feature 实例销毁时 Native 会自动退订)。

回调参数

字段类型必填说明
valuenumber(double)是系统媒体当前音量,变化后的音量值,0.01.0(Native 010 档位除以 10)

示例

const volume = require('system.volume')

// 开始监听
volume.onMediaValueChanged = function (ret) {
  console.log('音量发生变化:', ret.value)
}

// 停止监听
// volume.onMediaValueChanged = null

属性(property)

无普通 property(onMediaValueChanged 为事件,见上节)。

数据结构

GetRet

getMediaValue/setMediaValue 的 success 回调参数及 onMediaValueChanged 事件参数:

字段类型说明
valuenumber(double)音量值,0.0~1.0

SetInfo / GetInfo

setMediaValue(info) 参数对象:

字段类型说明
valuenumber(double)目标音量,0.0~1.0(必填)
successfunction成功回调 success(ret: GetRet)
failfunction失败回调 fail(errorMsg: string, code: number)
completefunction完成回调 complete(msg: string),msg 为 "success"/"fail"

getMediaValue(info) 参数对象仅包含 success/fail/complete 三个回调字段。

注意事项

  • 音量范围:JS 侧 0.01.0;Native 音频策略服务使用 010 的整数档,换算为 value * 10,因此最小调节粒度为 0.1。
  • 作用对象:仅针对媒体/音乐流(MEDIA_STREAM_MUSIC,即 "Music"),不影响通话、闹钟、铃声等其他流的音量。
  • 事件订阅时机:Native 在 Feature 实例被引用(onRequired)时即订阅音量变化策略项,无论是否赋值 onMediaValueChanged;没有 JS 监听器时事件不会派发。页面/组件销毁时建议置 null 取消监听。
  • 与 system.audio 的关系:system.audio 的 volume 属性最终也是设置音乐流音量,二者作用于同一系统音量,变化会互相体现(system.audio 播放中每秒刷新自身音量值)。
  • 参考用例:openvela/packages/apps/wearable/vela-sample/src/interface/system/volume/index.ux。

机型支持明细

设备产品说明
小米 S1 Pro 运动健康手表支持
小米手环 8 Pro支持
小米手环 9 / 9 Pro支持
Xiaomi Watch S3支持
Redmi Watch 4支持
小米腕部心电血压记录仪支持
小米手环 10支持
小米手环 10 Pro支持
Xiaomi Watch S4支持
REDMI Watch 5支持
REDMI Watch 6支持
Xiaomi Watch S5支持

源码

openvela 快应用代码仓库:openvela/frameworks/runtimes/feature/(JIDL 接口与 Native 实现)、openvela/packages/(使用示例);引擎内置 Feature 预编译于 libquickappfeatures。

参考来源

大纲