Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Docs
提交
6455fd1b
D
Docs
项目概览
OpenHarmony
/
Docs
大约 1 年 前同步成功
通知
159
Star
292
Fork
28
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
Docs
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
6455fd1b
编写于
8月 10, 2022
作者:
W
wangtao
提交者:
wangtao
8月 18, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
docs for group audio
Signed-off-by:
N
wangtao
<
wangtao468@huawei.com
>
上级
12e40076
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
534 addition
and
0 deletion
+534
-0
zh-cn/application-dev/reference/apis/js-apis-audio.md
zh-cn/application-dev/reference/apis/js-apis-audio.md
+534
-0
未找到文件。
zh-cn/application-dev/reference/apis/js-apis-audio.md
浏览文件 @
6455fd1b
...
@@ -250,6 +250,23 @@ audio.createAudioCapturer(audioCapturerOptions).then((data) => {
...
@@ -250,6 +250,23 @@ audio.createAudioCapturer(audioCapturerOptions).then((data) => {
});
});
```
```
## 常量
**系统接口:**
该接口为系统接口
**系统能力:**
SystemCapability.Multimedia.Audio.Device
| 名称 | 类型 | 可读 | 可写 | 说明 |
| ----- | -------------------------- | ---- | ---- | ------------------ |
| LOCAL_NETWORK_ID
<sup>
9+
</sup>
| string | 是 | 否 | 本地设备网络id。 |
**示例:**
```
js
import
audio
from
'
@ohos.multimedia.audio
'
;
const
localNetworkId
=
audio
.
LOCAL_NETWORK_ID
;
```
## AudioVolumeType
## AudioVolumeType
枚举,音频流类型。
枚举,音频流类型。
...
@@ -610,6 +627,55 @@ audio.createAudioCapturer(audioCapturerOptions).then((data) => {
...
@@ -610,6 +627,55 @@ audio.createAudioCapturer(audioCapturerOptions).then((data) => {
| volumeType |
[
AudioVolumeType
](
#audiovolumetype
)
| 是 | 音量流类型。 |
| volumeType |
[
AudioVolumeType
](
#audiovolumetype
)
| 是 | 音量流类型。 |
| volume | number | 是 | 音量等级,可设置范围通过getMinVolume和getMaxVolume获取。 |
| volume | number | 是 | 音量等级,可设置范围通过getMinVolume和getMaxVolume获取。 |
| updateUi | boolean | 是 | 在UI中显示音量变化。 |
| updateUi | boolean | 是 | 在UI中显示音量变化。 |
| volumeGroupId
<sup>
9+
</sup>
| number | 是 | 音量组id。可用于getGroupManager入参 |
| networkId
<sup>
9+
</sup>
| string | 是 | 网络id。 |
## ConnectType<sup>9+</sup>
枚举,设备连接类型。
**系统能力:**
以下各项对应的系统能力均为SystemCapability.Multimedia.Audio.Device
| 名称 | 默认值 | 描述 |
| :------------------------------ | :----- | :--------------------- |
| CONNECT_TYPE_LOCAL | 1 | 本地设备。 |
| CONNECT_TYPE_DISTRIBUTED | 2 | 分布式设备。 |
## VolumeGroupInfo<sup>9+</sup>
音量组信息。
**系统接口:**
该接口为系统接口
**系统能力:**
以下各项对应的系统能力均为SystemCapability.Multimedia.Audio.Volume
| 名称 | 类型 | 可读 | 可写 | 说明 |
| -------------------------- | -------------------------- | ---- | ---- | ---------- |
| networkId
<sup>
9+
</sup>
| string | 是 | 否 | 组网络id。 |
| groupId
<sup>
9+
</sup>
| number | 是 | 否 | 组设备组id。 |
| mappingId
<sup>
9+
</sup>
| number | 是 | 否 | 组映射id。 |
| groupName
<sup>
9+
</sup>
| number | 是 | 否 | 组名。 |
| ConnectType
<sup>
9+
</sup>
|
[
ConnectType
](
#connecttype9
)
| 是 | 否 | 连接设备类型。 |
## VolumeGroupInfos<sup>9+</sup>
音量组信息,数组类型,为
[
VolumeGroupInfo
](
#volumegroupinfo9
)
的数组,只读。
**系统接口:**
该接口为系统接口
**系统能力:**
SystemCapability.Multimedia.Audio.Volume
**示例:**
```
js
import
audio
from
'
@ohos.multimedia.audio
'
;
async
function
getVolumeGroupInfos
(){
let
volumegroupinfos
=
await
audio
.
getAudioManager
().
getVolumeGroups
(
audio
.
LOCAL_NETWORK_ID
);
console
.
info
(
'
Promise returned to indicate that the volumeGroup list is obtained.
'
+
JSON
.
stringify
(
volumegroupinfos
))
}
getVolumeGroupInfos
();
```
## DeviceChangeAction
## DeviceChangeAction
...
@@ -691,6 +757,7 @@ audio.createAudioCapturer(audioCapturerOptions).then((data) => {
...
@@ -691,6 +757,7 @@ audio.createAudioCapturer(audioCapturerOptions).then((data) => {
| AUDIO_SCENE_PHONE_CALL | 2 | 电话模式。
<br/>
此接口为系统接口,三方应用不支持调用。 |
| AUDIO_SCENE_PHONE_CALL | 2 | 电话模式。
<br/>
此接口为系统接口,三方应用不支持调用。 |
| AUDIO_SCENE_VOICE_CHAT | 3 | 语音聊天模式。 |
| AUDIO_SCENE_VOICE_CHAT | 3 | 语音聊天模式。 |
## AudioManager
## AudioManager
管理音频音量和音频设备。在调用AudioManager的接口前,需要先通过
[
getAudioManager
](
#audiogetaudiomanager
)
创建实例。
管理音频音量和音频设备。在调用AudioManager的接口前,需要先通过
[
getAudioManager
](
#audiogetaudiomanager
)
创建实例。
...
@@ -1891,6 +1958,473 @@ audioManager.getAudioScene().then((value) => {
...
@@ -1891,6 +1958,473 @@ audioManager.getAudioScene().then((value) => {
});
});
```
```
### getVolumeGroups<sup>9+</sup>
getVolumeGroups(networkId: string, callback: AsyncCallback<VolumeGroupInfos
\>\)
: void
获取音量组信息列表,使用callback方式异步返回结果。
**系统接口:**
该接口为系统接口
**系统能力:**
SystemCapability.Multimedia.Audio.Volume
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ---------- | ------------------------------------------------------------ | ---- | -------------------- |
| networkId | string | 是 | 设备的网络id。本地设备audio.LOCAL_NETWORK_ID ,也可以通过getRoutingManager().getDevices()获取全部networkId。 |
| callback | AsyncCallback
<
[VolumeGroupInfos](#volumegroupinfos9)
>
| 是 | 回调,返回音量组信息列表。 |
**示例:**
```
js
audioManager
.
getVolumeGroups
(
audio
.
LOCAL_NETWORK_ID
,
(
err
,
value
)
=>
{
if
(
err
)
{
console
.
error
(
`Failed to obtain the volume group infos list.
${
err
.
message
}
`
);
return
;
}
console
.
info
(
'
Callback invoked to indicate that the volume group infos list is obtained.
'
);
});
```
### getVolumeGroups<sup>9+</sup>
getVolumeGroups(networkId: string
\)
: Promise<VolumeGroupInfos
\>
获取音量组信息列表,使用promise方式异步返回结果。
**系统接口:**
该接口为系统接口
**系统能力:**
SystemCapability.Multimedia.Audio.Volume
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ---------- | ------------------------------------------------------------ | ---- | -------------------- |
| networkId | string | 是 | 设备的网络id。本地设备audio.LOCAL_NETWORK_ID ,也可以通过getRoutingManager().getDevices()获取全部networkId。 |
**示例:**
```
js
async
function
getVolumeGroupInfos
(){
let
volumegroupinfos
=
await
audio
.
getAudioManager
().
getVolumeGroups
(
audio
.
LOCAL_NETWORK_ID
);
console
.
info
(
'
Promise returned to indicate that the volumeGroup list is obtained.
'
+
JSON
.
stringify
(
volumegroupinfos
))
}
```
### getGroupManager<sup>9+</sup>
getGroupManager(groupId: number, callback: AsyncCallback<AudioGroupManager
\>\)
: void
获取音频组管理器,使用callback方式异步返回结果。
**系统接口:**
该接口为系统接口
**系统能力:**
SystemCapability.Multimedia.Audio.Volume
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ---------- | ------------------------------------------------------------ | ---- | -------------------- |
| networkId | string | 是 | 设备的网络id。 |
| callback | AsyncCallback
<
[
AudioGroupManager
](
#audiogroupmanager9
)
>
| 是 | 回调,返回一个音量组音量组实例。 |
**示例:**
```
js
async
function
getGroupManager
(){
let
value
=
await
audioManager
.
getVolumeGroups
(
audio
.
LOCAL_NETWORK_ID
);
if
(
value
.
length
>
0
)
{
let
groupid
=
value
[
0
].
groupId
;
audioManager
.
getGroupManager
(
groupid
,
(
err
,
value
)
=>
{
if
(
err
)
{
console
.
error
(
`Failed to obtain the volume group infos list.
${
err
.
message
}
`
);
return
;
}
audioGroupManager
=
value
console
.
info
(
'
Callback invoked to indicate that the volume group infos list is obtained.
'
);
});
}
}
```
### getGroupManager<sup>9+</sup>
getGroupManager(groupId: number
\)
: Promise<AudioGroupManager
\>
获取音频组管理器,使用promise方式异步返回结果。
**系统接口:**
该接口为系统接口
**系统能力:**
SystemCapability.Multimedia.Audio.Volume
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ---------- | ------------------------------------------------------------ | ---- | -------------------- |
| networkId | string | 是 | 设备的网络id。 |
**示例:**
```
js
async
function
getGroupManager
(){
let
value
=
await
audioManager
.
getVolumeGroups
(
audio
.
LOCAL_NETWORK_ID
);
if
(
value
.
length
>
0
)
{
let
groupid
=
value
[
0
].
groupId
;
let
audioGroupManager
=
await
audioManager
.
getGroupManager
(
audio
.
LOCAL_NETWORK_ID
)
console
.
info
(
'
Callback invoked to indicate that the volume group infos list is obtained.
'
);
}
}
```
## AudioGroupManager<sup>9+</sup>
管理音频组音量。在调用AudioGroupManager的接口前,需要先通过
[
getGroupManager
](
#getgroupmanager9
)
创建实例。
**系统接口:**
该接口为系统接口
**系统能力:**
SystemCapability.Multimedia.Audio.Volume
### setVolume<sup>9+</sup>
setVolume(volumeType: AudioVolumeType, volume: number, callback: AsyncCallback
<
void
>
): void
设置指定流的音量,使用callback方式异步返回结果。
**需要权限:**
ohos.permission.ACCESS_NOTIFICATION_POLICY
<br/>
仅设置铃声(即volumeType为AudioVolumeType.RINGTONE)在静音和非静音状态切换时需要该权限。
**系统能力:**
SystemCapability.Multimedia.Audio.Volume
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ---------- | ----------------------------------- | ---- | -------------------------------------------------------- |
| volumeType |
[
AudioVolumeType
](
#audiovolumetype
)
| 是 | 音量流类型。 |
| volume | number | 是 | 音量等级,可设置范围通过getMinVolume和getMaxVolume获取。 |
| callback | AsyncCallback
<
void
>
| 是 | 回调表示成功还是失败。 |
**示例:**
```
js
audioGroupManager
.
setVolume
(
audio
.
AudioVolumeType
.
MEDIA
,
10
,
(
err
)
=>
{
if
(
err
)
{
console
.
error
(
`Failed to set the volume.
${
err
.
message
}
`
);
return
;
}
console
.
log
(
`Callback invoked to indicate a successful volume setting.`
);
});
```
### setVolume<sup>9+</sup>
setVolume(volumeType: AudioVolumeType, volume: number): Promise
<
void
>
设置指定流的音量,使用Promise方式异步返回结果。
**需要权限:**
ohos.permission.ACCESS_NOTIFICATION_POLICY
<br/>
仅设置铃声(即volumeType为AudioVolumeType.RINGTONE)在静音和非静音状态切换时需要该权限。
**系统能力:**
SystemCapability.Multimedia.Audio.Volume
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ---------- | ----------------------------------- | ---- | -------------------------------------------------------- |
| volumeType |
[
AudioVolumeType
](
#audiovolumetype
)
| 是 | 音量流类型。 |
| volume | number | 是 | 音量等级,可设置范围通过getMinVolume和getMaxVolume获取。 |
**返回值:**
| 类型 | 说明 |
| ------------------- | ----------------------------- |
| Promise
<
void
>
| Promise回调表示成功还是失败。 |
**示例:**
```
js
audioGroupManager
.
setVolume
(
audio
.
AudioVolumeType
.
MEDIA
,
10
).
then
(()
=>
{
console
.
log
(
`Promise returned to indicate a successful volume setting.`
);
});
```
### getVolume<sup>9+</sup>
getVolume(volumeType: AudioVolumeType, callback: AsyncCallback
<
number
>
): void
获取指定流的音量,使用callback方式异步返回结果。
**系统能力:**
SystemCapability.Multimedia.Audio.Volume
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ---------- | ----------------------------------- | ---- | ------------------ |
| volumeType |
[
AudioVolumeType
](
#audiovolumetype
)
| 是 | 音量流类型。 |
| callback | AsyncCallback
<
number
>
| 是 | 回调返回音量大小。 |
**示例:**
```
js
audioGroupManager
.
getVolume
(
audio
.
AudioVolumeType
.
MEDIA
,
(
err
,
value
)
=>
{
if
(
err
)
{
console
.
error
(
`Failed to obtain the volume.
${
err
.
message
}
`
);
return
;
}
console
.
log
(
`Callback invoked to indicate that the volume is obtained.`
);
});
```
### getVolume<sup>9+</sup>
getVolume(volumeType: AudioVolumeType): Promise
<
number
>
获取指定流的音量,使用Promise方式异步返回结果。
**系统能力:**
SystemCapability.Multimedia.Audio.Volume
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ---------- | ----------------------------------- | ---- | ------------ |
| volumeType |
[
AudioVolumeType
](
#audiovolumetype
)
| 是 | 音量流类型。 |
**返回值:**
| 类型 | 说明 |
| --------------------- | ------------------------- |
| Promise
<
number
>
| Promise回调返回音量大小。 |
**示例:**
```
js
audioGroupManager
.
getVolume
(
audio
.
AudioVolumeType
.
MEDIA
).
then
((
value
)
=>
{
console
.
log
(
`Promise returned to indicate that the volume is obtained.`
+
value
);
});
```
### getMinVolume<sup>9+</sup>
getMinVolume(volumeType: AudioVolumeType, callback: AsyncCallback
<
number
>
): void
获取指定流的最小音量,使用callback方式异步返回结果。
**系统能力:**
SystemCapability.Multimedia.Audio.Volume
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ---------- | ----------------------------------- | ---- | ------------------ |
| volumeType |
[
AudioVolumeType
](
#audiovolumetype
)
| 是 | 音量流类型。 |
| callback | AsyncCallback
<
number
>
| 是 | 回调返回最小音量。 |
**示例:**
```
js
audioGroupManager
.
getMinVolume
(
audio
.
AudioVolumeType
.
MEDIA
,
(
err
,
value
)
=>
{
if
(
err
)
{
console
.
error
(
`Failed to obtain the minimum volume.
${
err
.
message
}
`
);
return
;
}
console
.
log
(
`Callback invoked to indicate that the minimum volume is obtained.`
+
value
);
});
```
### getMinVolume<sup>9+</sup>
getMinVolume(volumeType: AudioVolumeType): Promise
<
number
>
获取指定流的最小音量,使用Promise方式异步返回结果。
**系统能力:**
SystemCapability.Multimedia.Audio.Volume
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ---------- | ----------------------------------- | ---- | ------------ |
| volumeType |
[
AudioVolumeType
](
#audiovolumetype
)
| 是 | 音量流类型。 |
**返回值:**
| 类型 | 说明 |
| --------------------- | ------------------------- |
| Promise
<
number
>
| Promise回调返回最小音量。 |
**示例:**
```
js
audioGroupManager
.
getMinVolume
(
audio
.
AudioVolumeType
.
MEDIA
).
then
((
value
)
=>
{
console
.
log
(
`Promised returned to indicate that the minimum volume is obtained.`
+
value
);
});
```
### getMaxVolume<sup>9+</sup>
getMaxVolume(volumeType: AudioVolumeType, callback: AsyncCallback
<
number
>
): void
获取指定流的最大音量,使用callback方式异步返回结果。
**系统能力:**
SystemCapability.Multimedia.Audio.Volume
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ---------- | ----------------------------------- | ---- | ---------------------- |
| volumeType |
[
AudioVolumeType
](
#audiovolumetype
)
| 是 | 音量流类型。 |
| callback | AsyncCallback
<
number
>
| 是 | 回调返回最大音量大小。 |
**示例:**
```
js
audioGroupManager
.
getMaxVolume
(
audio
.
AudioVolumeType
.
MEDIA
,
(
err
,
value
)
=>
{
if
(
err
)
{
console
.
error
(
`Failed to obtain the maximum volume.
${
err
.
message
}
`
);
return
;
}
console
.
log
(
`Callback invoked to indicate that the maximum volume is obtained.`
+
value
);
});
```
### getMaxVolume<sup>9+</sup>
getMaxVolume(volumeType: AudioVolumeType): Promise
<
number
>
获取指定流的最大音量,使用Promise方式异步返回结果。
**系统能力:**
SystemCapability.Multimedia.Audio.Volume
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ---------- | ----------------------------------- | ---- | ------------ |
| volumeType |
[
AudioVolumeType
](
#audiovolumetype
)
| 是 | 音量流类型。 |
**返回值:**
| 类型 | 说明 |
| --------------------- | ----------------------------- |
| Promise
<
number
>
| Promise回调返回最大音量大小。 |
**示例:**
```
js
audioGroupManager
.
getMaxVolume
(
audio
.
AudioVolumeType
.
MEDIA
).
then
((
data
)
=>
{
console
.
log
(
`Promised returned to indicate that the maximum volume is obtained.`
);
});
```
### mute<sup>9+</sup>
mute(volumeType: AudioVolumeType, mute: boolean, callback: AsyncCallback
<
void
>
): void
设置指定音量流静音,使用callback方式异步返回结果。
**需要权限:**
ohos.permission.ACCESS_NOTIFICATION_POLICY
<br/>
仅设置铃声(即volumeType为AudioVolumeType.RINGTONE)在静音和非静音状态切换时需要该权限。
**系统能力:**
SystemCapability.Multimedia.Audio.Volume
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ---------- | ----------------------------------- | ---- | ------------------------------------- |
| volumeType |
[
AudioVolumeType
](
#audiovolumetype
)
| 是 | 音量流类型。 |
| mute | boolean | 是 | 静音状态,true为静音,false为非静音。 |
| callback | AsyncCallback
<
void
>
| 是 | 回调表示成功还是失败。 |
**示例:**
```
js
audioGroupManager
.
mute
(
audio
.
AudioVolumeType
.
MEDIA
,
true
,
(
err
)
=>
{
if
(
err
)
{
console
.
error
(
`Failed to mute the stream.
${
err
.
message
}
`
);
return
;
}
console
.
log
(
`Callback invoked to indicate that the stream is muted.`
);
});
```
### mute<sup>9+</sup>
mute(volumeType: AudioVolumeType, mute: boolean): Promise
<
void
>
设置指定音量流静音,使用Promise方式异步返回结果。
**需要权限:**
ohos.permission.ACCESS_NOTIFICATION_POLICY
<br/>
仅设置铃声(即volumeType为AudioVolumeType.RINGTONE)在静音和非静音状态切换时需要该权限。
**系统能力:**
SystemCapability.Multimedia.Audio.Volume
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ---------- | ----------------------------------- | ---- | ------------------------------------- |
| volumeType |
[
AudioVolumeType
](
#audiovolumetype
)
| 是 | 音量流类型。 |
| mute | boolean | 是 | 静音状态,true为静音,false为非静音。 |
**返回值:**
| 类型 | 说明 |
| ------------------- | ----------------------------- |
| Promise
<
void
>
| Promise回调表示成功还是失败。 |
**示例:**
```
js
audioGroupManager
.
mute
(
audio
.
AudioVolumeType
.
MEDIA
,
true
).
then
(()
=>
{
console
.
log
(
`Promise returned to indicate that the stream is muted.`
);
});
```
### isMute<sup>9+</sup>
isMute(volumeType: AudioVolumeType, callback: AsyncCallback
<
boolean
>
): void
获取指定音量流是否被静音,使用callback方式异步返回结果。
**系统能力:**
SystemCapability.Multimedia.Audio.Volume
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ---------- | ----------------------------------- | ---- | ----------------------------------------------- |
| volumeType |
[
AudioVolumeType
](
#audiovolumetype
)
| 是 | 音量流类型。 |
| callback | AsyncCallback
<
boolean
>
| 是 | 回调返回流静音状态,true为静音,false为非静音。 |
**示例:**
```
js
audioGroupManager
.
isMute
(
audio
.
AudioVolumeType
.
MEDIA
,
(
err
,
value
)
=>
{
if
(
err
)
{
console
.
error
(
`Failed to obtain the mute status.
${
err
.
message
}
`
);
return
;
}
console
.
log
(
`Callback invoked to indicate that the mute status of the stream is obtained.`
+
value
);
});
```
### isMute<sup>9+</sup>
isMute(volumeType: AudioVolumeType): Promise
<
boolean
>
获取指定音量流是否被静音,使用Promise方式异步返回结果。
**系统能力:**
SystemCapability.Multimedia.Audio.Volume
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ---------- | ----------------------------------- | ---- | ------------ |
| volumeType |
[
AudioVolumeType
](
#audiovolumetype
)
| 是 | 音量流类型。 |
**返回值:**
| 类型 | 说明 |
| ---------------------- | ------------------------------------------------------ |
| Promise
<
boolean
>
| Promise回调返回流静音状态,true为静音,false为非静音。 |
**示例:**
```
js
audioGroupManager
.
isMute
(
audio
.
AudioVolumeType
.
MEDIA
).
then
((
value
)
=>
{
console
.
log
(
`Promise returned to indicate that the mute status of the stream is obtained.`
+
value
);
});
```
## AudioStreamManager<sup>9+</sup>
## AudioStreamManager<sup>9+</sup>
管理音频流。在使用AudioStreamManager的API前,需要使用
[
getStreamManager
](
#audiogetstreammanager9
)
获取AudioStreamManager实例。
管理音频流。在使用AudioStreamManager的API前,需要使用
[
getStreamManager
](
#audiogetstreammanager9
)
获取AudioStreamManager实例。
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录