提交 f0072081 编写于 作者: J jiao_yanlin

Sample code and interface consistency check

Signed-off-by: Njiao_yanlin <jiaoyanlin@huawei.com>
上级 2818adec
...@@ -73,7 +73,10 @@ createAudioRenderer(options: AudioRendererOptions, callback: AsyncCallback\<Audi ...@@ -73,7 +73,10 @@ createAudioRenderer(options: AudioRendererOptions, callback: AsyncCallback\<Audi
**示例:** **示例:**
```js ```js
import featureAbility from '@ohos.ability.featureAbility';
import fileio from '@ohos.fileio';
import audio from '@ohos.multimedia.audio'; import audio from '@ohos.multimedia.audio';
let audioStreamInfo = { let audioStreamInfo = {
samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_44100, samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_44100,
channels: audio.AudioChannel.CHANNEL_1, channels: audio.AudioChannel.CHANNEL_1,
...@@ -125,6 +128,8 @@ createAudioRenderer(options: AudioRendererOptions): Promise<AudioRenderer\> ...@@ -125,6 +128,8 @@ createAudioRenderer(options: AudioRendererOptions): Promise<AudioRenderer\>
**示例:** **示例:**
```js ```js
import featureAbility from '@ohos.ability.featureAbility';
import fileio from '@ohos.fileio';
import audio from '@ohos.multimedia.audio'; import audio from '@ohos.multimedia.audio';
let audioStreamInfo = { let audioStreamInfo = {
...@@ -321,14 +326,19 @@ createTonePlayer(options: AudioRendererInfo): Promise&lt;TonePlayer&gt; ...@@ -321,14 +326,19 @@ createTonePlayer(options: AudioRendererInfo): Promise&lt;TonePlayer&gt;
```js ```js
import audio from '@ohos.multimedia.audio'; import audio from '@ohos.multimedia.audio';
let tonePlayer;
async function createTonePlayer(){ async function createTonePlayer(){
let audioRendererInfo = { let audioRendererInfo = {
"contentType": audio.ContentType.CONTENT_TYPE_MUSIC, contentType : audio.ContentType.CONTENT_TYPE_MUSIC,
"streamUsage": audio.StreamUsage.STREAM_USAGE_MEDIA, streamUsage : audio.StreamUsage.STREAM_USAGE_MEDIA,
"rendererFlags": 0 rendererFlags : 0
} }
let tonePlayer = await audio.createTonePlayer(audioRendererInfo); createTonePlayer();
} }
async function createTonePlayer(){
tonePlayer = await audio.createTonePlayer(audioRendererInfo);
}
``` ```
## AudioVolumeType ## AudioVolumeType
...@@ -622,12 +632,12 @@ async function createTonePlayer(){ ...@@ -622,12 +632,12 @@ async function createTonePlayer(){
**系统能力:** 以下各项对应的系统能力均为SystemCapability.Multimedia.Audio.Core **系统能力:** 以下各项对应的系统能力均为SystemCapability.Multimedia.Audio.Core
| 名称 | 类型 | 必填 | 说明 | | 名称 | 类型 | 可读 | 可写 | 说明 |
| ------------ | ------------------------------------------------- | ---- | ------------------ | | ------------ | ------------------------------------------------- | ---- | ---- | ------------------ |
| samplingRate | [AudioSamplingRate](#audiosamplingrate8) | 是 | 音频文件的采样率。 | | samplingRate | [AudioSamplingRate](#audiosamplingrate8) | 是 | 是 | 音频文件的采样率。 |
| channels | [AudioChannel](#audiochannel8) | 是 | 音频文件的通道数。 | | channels | [AudioChannel](#audiochannel8) | 是 | 是 | 音频文件的通道数。 |
| sampleFormat | [AudioSampleFormat](#audiosampleformat8) | 是 | 音频采样格式。 | | sampleFormat | [AudioSampleFormat](#audiosampleformat8) | 是 | 是 | 音频采样格式。 |
| encodingType | [AudioEncodingType](#audioencodingtype8) | 是 | 音频编码格式。 | | encodingType | [AudioEncodingType](#audioencodingtype8) | 是 | 是 | 音频编码格式。 |
## AudioRendererInfo<sup>8+</sup> ## AudioRendererInfo<sup>8+</sup>
...@@ -635,11 +645,11 @@ async function createTonePlayer(){ ...@@ -635,11 +645,11 @@ async function createTonePlayer(){
**系统能力:** 以下各项对应的系统能力均为SystemCapability.Multimedia.Audio.Core **系统能力:** 以下各项对应的系统能力均为SystemCapability.Multimedia.Audio.Core
| 名称 | 类型 | 必填 | 说明 | | 名称 | 类型 | 可读 | 可写 | 说明 |
| ------------- | --------------------------- | ---- | ---------------- | | ------------- | --------------------------- | ---- | ---- | ---------------- |
| content | [ContentType](#contenttype) | 是 | 媒体类型。 | | content | [ContentType](#contenttype) | 是 | 是 | 媒体类型。 |
| usage | [StreamUsage](#streamusage) | 是 | 音频流使用类型。 | | usage | [StreamUsage](#streamusage) | 是 | 是 | 音频流使用类型。 |
| rendererFlags | number | 是 | 音频渲染器标志。 | | rendererFlags | number | 是 | 是 | 音频渲染器标志。 |
## InterruptResult<sup>9+</sup> ## InterruptResult<sup>9+</sup>
...@@ -649,10 +659,10 @@ async function createTonePlayer(){ ...@@ -649,10 +659,10 @@ async function createTonePlayer(){
**系统接口:** 该接口为系统接口 **系统接口:** 该接口为系统接口
| 名称 | 类型 | 必填 | 说明 | | 名称 | 类型 | 可读 | 可写 | 说明 |
| --------------| -------------------------------------------------------------- | ---- | ---------------- | | --------------| -------------------------------------------------------------- | ---- | ---- | ---------------- |
| requestResult | [InterruptRequestResultType](#interruptrequestresulttype9) | 是 | 表示音频请求中断类型。 | | requestResult | [InterruptRequestResultType](#interruptrequestresulttype9) | 是 | 是 | 表示音频请求中断类型。 |
| interruptNode | number | 是 | 音频请求中断的节点。 | | interruptNode | number | 是 | 是 | 音频请求中断的节点。 |
## AudioRendererOptions<sup>8+</sup> ## AudioRendererOptions<sup>8+</sup>
...@@ -660,10 +670,10 @@ async function createTonePlayer(){ ...@@ -660,10 +670,10 @@ async function createTonePlayer(){
**系统能力:** 以下各项对应的系统能力均为SystemCapability.Multimedia.Audio.Renderer **系统能力:** 以下各项对应的系统能力均为SystemCapability.Multimedia.Audio.Renderer
| 名称 | 类型 | 必填 | 说明 | | 名称 | 类型 | 可读 | 可写 | 说明 |
| ------------ | ---------------------------------------- | ---- | ---------------- | | ------------ | ---------------------------------------- | ---- | ---- | ---------------- |
| streamInfo | [AudioStreamInfo](#audiostreaminfo8) | 是 | 表示音频流信息。 | | streamInfo | [AudioStreamInfo](#audiostreaminfo8) | 是 | 是 | 表示音频流信息。 |
| rendererInfo | [AudioRendererInfo](#audiorendererinfo8) | 是 | 表示渲染器信息。 | | rendererInfo | [AudioRendererInfo](#audiorendererinfo8) | 是 | 是 | 表示渲染器信息。 |
## InterruptEvent<sup>9+</sup> ## InterruptEvent<sup>9+</sup>
...@@ -671,11 +681,11 @@ async function createTonePlayer(){ ...@@ -671,11 +681,11 @@ async function createTonePlayer(){
**系统能力:** 以下各项对应的系统能力均为SystemCapability.Multimedia.Audio.Renderer **系统能力:** 以下各项对应的系统能力均为SystemCapability.Multimedia.Audio.Renderer
| 名称 | 类型 | 必填 | 说明 | | 名称 | 类型 |可读 |可写 | 说明 |
| --------- | ------------------------------------------ | ---- | ------------------------------------ | | --------- | ------------------------------------------ | ---- | ---- | ------------------------------------ |
| eventType | [InterruptType](#interrupttype) | 是 | 中断事件类型,开始或是结束。 | | eventType | [InterruptType](#interrupttype) | 是 | 是 | 中断事件类型,开始或是结束。 |
| forceType | [InterruptForceType](#interruptforcetype9) | 是 | 操作是由系统执行或是由应用程序执行。 | | forceType | [InterruptForceType](#interruptforcetype9) | 是 | 是 | 操作是由系统执行或是由应用程序执行。 |
| hintType | [InterruptHint](#interrupthint) | 是 | 中断提示。 | | hintType | [InterruptHint](#interrupthint) | 是 | 是 | 中断提示。 |
## VolumeEvent<sup>8+</sup> ## VolumeEvent<sup>8+</sup>
...@@ -685,13 +695,13 @@ async function createTonePlayer(){ ...@@ -685,13 +695,13 @@ async function createTonePlayer(){
**系统能力:** 以下各项对应的系统能力均为SystemCapability.Multimedia.Audio.Volume **系统能力:** 以下各项对应的系统能力均为SystemCapability.Multimedia.Audio.Volume
| 名称 | 类型 | 必填 | 说明 | | 名称 | 类型 | 可读 | 可写 | 说明 |
| ---------- | ----------------------------------- | ---- | -------------------------------------------------------- | | ---------- | ----------------------------------- | ---- | ---- | -------------------------------------------------------- |
| 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入参 | | volumeGroupId<sup>9+</sup> | number | 是 | 是 | 音量组id。可用于getGroupManager入参 |
| networkId<sup>9+</sup> | string | 是 | 网络id。 | | networkId<sup>9+</sup> | string | 是 | 是 | 网络id。 |
## MicStateChangeEvent<sup>9+</sup> ## MicStateChangeEvent<sup>9+</sup>
...@@ -699,9 +709,9 @@ async function createTonePlayer(){ ...@@ -699,9 +709,9 @@ async function createTonePlayer(){
**系统能力:** 以下各项对应的系统能力均为SystemCapability.Multimedia.Audio.Device **系统能力:** 以下各项对应的系统能力均为SystemCapability.Multimedia.Audio.Device
| 名称 | 类型 | 必填 | 说明 | | 名称 | 类型 | 可读 | 可写 | 说明 |
| ---------- | ----------------------------------- | ---- | -------------------------------------------------------- | | ---------- | ----------------------------------- | ---- | ---- | -------------------------------------------------------- |
| mute | boolean | 是 | 回调返回系统麦克风静音状态,true为静音,false为非静音。 | | mute | boolean | 是 | 是 | 回调返回系统麦克风静音状态,true为静音,false为非静音。 |
## ConnectType<sup>9+</sup> ## ConnectType<sup>9+</sup>
...@@ -746,10 +756,10 @@ async function createTonePlayer(){ ...@@ -746,10 +756,10 @@ async function createTonePlayer(){
**系统能力:** SystemCapability.Multimedia.Audio.Device **系统能力:** SystemCapability.Multimedia.Audio.Device
| 名称 | 类型 | 必填 | 说明 | | 名称 | 类型 | 可读 | 可写 | 说明 |
| :---------------- | :------------------------------------------------ | :--- | :----------------- | | :---------------- | :------------------------------------------------ | :--- | :--- | :----------------- |
| type | [DeviceChangeType](#devicechangetype) | 是 | 设备连接状态变化。 | | type | [DeviceChangeType](#devicechangetype) | 是 | 是 | 设备连接状态变化。 |
| deviceDescriptors | [AudioDeviceDescriptors](#audiodevicedescriptors) | 是 | 设备信息。 | | deviceDescriptors | [AudioDeviceDescriptors](#audiodevicedescriptors) | 是 | 是 | 设备信息。 |
## DeviceChangeType ## DeviceChangeType
...@@ -768,10 +778,10 @@ async function createTonePlayer(){ ...@@ -768,10 +778,10 @@ async function createTonePlayer(){
**系统能力:** 以下各项对应的系统能力均为SystemCapability.Multimedia.Audio.Capturer **系统能力:** 以下各项对应的系统能力均为SystemCapability.Multimedia.Audio.Capturer
| 名称 | 类型 | 必填 | 说明 | | 名称 | 类型 | 可读 | 可写 | 说明 |
| ------------ | --------------------------------------- | ---- | ---------------- | | ------------ | --------------------------------------- | ---- | ---- | ---------------- |
| streamInfo | [AudioStreamInfo](#audiostreaminfo8) | 是 | 表示音频流信息。 | | streamInfo | [AudioStreamInfo](#audiostreaminfo8) | 是 | 是 | 表示音频流信息。 |
| capturerInfo | [AudioCapturerInfo](#audiocapturerinfo) | 是 | 表示采集器信息。 | | capturerInfo | [AudioCapturerInfo](#audiocapturerinfo) | 是 | 是 | 表示采集器信息。 |
## AudioCapturerInfo<sup>8+</sup><a name="audiocapturerinfo"></a> ## AudioCapturerInfo<sup>8+</sup><a name="audiocapturerinfo"></a>
...@@ -1211,8 +1221,13 @@ getVolumeGroupManager(groupId: number\): Promise<AudioVolumeGroupManager\> ...@@ -1211,8 +1221,13 @@ getVolumeGroupManager(groupId: number\): Promise<AudioVolumeGroupManager\>
```js ```js
let groupid = audio.DEFAULT_VOLUME_GROUP_ID; let groupid = audio.DEFAULT_VOLUME_GROUP_ID;
let audioVolumeGroupManager = await audioVolumeManager.getVolumeGroupManager(groupid); let audioVolumeGroupManager;
console.info('Callback invoked to indicate that the volume group infos list is obtained.'); getVolumeGroupManager();
async function getVolumeGroupManager(){
audioVolumeGroupManager = await audioVolumeManager.getVolumeGroupManager(groupid);
console.info('Callback invoked to indicate that the volume group infos list is obtained.');
}
``` ```
### on('volumeChange')<sup>9+</sup> ### on('volumeChange')<sup>9+</sup>
...@@ -2960,11 +2975,11 @@ promise.then(function (value) { ...@@ -2960,11 +2975,11 @@ promise.then(function (value) {
**系统接口:** 该接口为系统接口 **系统接口:** 该接口为系统接口
| 名称 | 类型 | 必填 | 说明 | | 名称 | 类型 | 可读 | 可写 | 说明 |
| -------------| ---------------------------------------- | ---- | -------------- | | -------------| ---------------------------------------- | ---- | ----| -------------- |
| uid | number | 是 | 表示应用ID。<br> **系统能力:** SystemCapability.Multimedia.Audio.Core| | uid | number | 是 | 是 | 表示应用ID。<br> **系统能力:** SystemCapability.Multimedia.Audio.Core|
| rendererInfo | [AudioRendererInfo](#audiorendererinfo8) | | 表示渲染器信息。<br> **系统能力:** SystemCapability.Multimedia.Audio.Renderer| | rendererInfo | [AudioRendererInfo](#audiorendererinfo8) | 是 | 是 | 表示渲染器信息。<br> **系统能力:** SystemCapability.Multimedia.Audio.Renderer|
| rendererId | number | | 音频流唯一id。<br> **系统能力:** SystemCapability.Multimedia.Audio.Renderer| | rendererId | number | 是 | 是 | 音频流唯一id。<br> **系统能力:** SystemCapability.Multimedia.Audio.Renderer|
**示例:** **示例:**
...@@ -3827,7 +3842,10 @@ on(type: 'audioInterrupt', callback: Callback\<InterruptEvent>): void ...@@ -3827,7 +3842,10 @@ on(type: 'audioInterrupt', callback: Callback\<InterruptEvent>): void
```js ```js
let isPlay; let isPlay;
let started; let started;
audioRenderer.on('audioInterrupt', async(interruptEvent) => { onAudioInterrupt();
async function onAudioInterrupt(){
audioRenderer.on('audioInterrupt', async(interruptEvent) => {
if (interruptEvent.forceType == audio.InterruptForceType.INTERRUPT_FORCE) { if (interruptEvent.forceType == audio.InterruptForceType.INTERRUPT_FORCE) {
switch (interruptEvent.hintType) { switch (interruptEvent.hintType) {
case audio.InterruptHint.INTERRUPT_HINT_PAUSE: case audio.InterruptHint.INTERRUPT_HINT_PAUSE:
...@@ -3869,7 +3887,8 @@ audioRenderer.on('audioInterrupt', async(interruptEvent) => { ...@@ -3869,7 +3887,8 @@ audioRenderer.on('audioInterrupt', async(interruptEvent) => {
break; break;
} }
} }
}); });
}
``` ```
### on('markReach')<sup>8+</sup> ### on('markReach')<sup>8+</sup>
...@@ -4685,6 +4704,8 @@ load(type: ToneType, callback: AsyncCallback&lt;void&gt;): void ...@@ -4685,6 +4704,8 @@ load(type: ToneType, callback: AsyncCallback&lt;void&gt;): void
加载DTMF音调配置。使用callback方式异步返回结果。 加载DTMF音调配置。使用callback方式异步返回结果。
**系统接口:** 该接口为系统接口
**系统能力:** SystemCapability.Multimedia.Audio.Tone **系统能力:** SystemCapability.Multimedia.Audio.Tone
**参数:** **参数:**
...@@ -4713,6 +4734,8 @@ load(type: ToneType): Promise&lt;void&gt; ...@@ -4713,6 +4734,8 @@ load(type: ToneType): Promise&lt;void&gt;
加载DTMF音调配置。使用Promise方式异步返回结果。 加载DTMF音调配置。使用Promise方式异步返回结果。
**系统接口:** 该接口为系统接口
**系统能力:** SystemCapability.Multimedia.Audio.Tone **系统能力:** SystemCapability.Multimedia.Audio.Tone
**参数:** **参数:**
...@@ -4743,6 +4766,8 @@ start(callback: AsyncCallback&lt;void&gt;): void ...@@ -4743,6 +4766,8 @@ start(callback: AsyncCallback&lt;void&gt;): void
启动DTMF音调播放。使用callback方式异步返回结果。 启动DTMF音调播放。使用callback方式异步返回结果。
**系统接口:** 该接口为系统接口
**系统能力:** SystemCapability.Multimedia.Audio.Tone **系统能力:** SystemCapability.Multimedia.Audio.Tone
**参数:** **参数:**
...@@ -4770,6 +4795,8 @@ start(): Promise&lt;void&gt; ...@@ -4770,6 +4795,8 @@ start(): Promise&lt;void&gt;
启动DTMF音调播放。使用Promise方式异步返回结果。 启动DTMF音调播放。使用Promise方式异步返回结果。
**系统接口:** 该接口为系统接口
**系统能力:** SystemCapability.Multimedia.Audio.Tone **系统能力:** SystemCapability.Multimedia.Audio.Tone
**返回值:** **返回值:**
...@@ -4794,6 +4821,8 @@ stop(callback: AsyncCallback&lt;void&gt;): void ...@@ -4794,6 +4821,8 @@ stop(callback: AsyncCallback&lt;void&gt;): void
停止当前正在播放的音调。使用callback方式异步返回结果。 停止当前正在播放的音调。使用callback方式异步返回结果。
**系统接口:** 该接口为系统接口
**系统能力:** SystemCapability.Multimedia.Audio.Tone **系统能力:** SystemCapability.Multimedia.Audio.Tone
**参数:** **参数:**
...@@ -4821,6 +4850,8 @@ stop(): Promise&lt;void&gt; ...@@ -4821,6 +4850,8 @@ stop(): Promise&lt;void&gt;
停止当前正在播放的音调。使用Promise方式异步返回结果。 停止当前正在播放的音调。使用Promise方式异步返回结果。
**系统接口:** 该接口为系统接口
**系统能力:** SystemCapability.Multimedia.Audio.Tone **系统能力:** SystemCapability.Multimedia.Audio.Tone
**返回值:** **返回值:**
...@@ -4845,6 +4876,8 @@ release(callback: AsyncCallback&lt;void&gt;): void ...@@ -4845,6 +4876,8 @@ release(callback: AsyncCallback&lt;void&gt;): void
释放与此TonePlay对象关联的资源。使用callback方式异步返回结果。 释放与此TonePlay对象关联的资源。使用callback方式异步返回结果。
**系统接口:** 该接口为系统接口
**系统能力:** SystemCapability.Multimedia.Audio.Tone **系统能力:** SystemCapability.Multimedia.Audio.Tone
**参数:** **参数:**
...@@ -4872,6 +4905,8 @@ release(): Promise&lt;void&gt; ...@@ -4872,6 +4905,8 @@ release(): Promise&lt;void&gt;
释放与此TonePlay对象关联的资源。使用Promise方式异步返回结果。 释放与此TonePlay对象关联的资源。使用Promise方式异步返回结果。
**系统接口:** 该接口为系统接口
**系统能力:** SystemCapability.Multimedia.Audio.Tone **系统能力:** SystemCapability.Multimedia.Audio.Tone
**返回值:** **返回值:**
...@@ -4927,11 +4962,11 @@ tonePlayer.release().then(() => { ...@@ -4927,11 +4962,11 @@ tonePlayer.release().then(() => {
**系统能力:** 以下各项对应的系统能力均为SystemCapability.Multimedia.Audio.Renderer **系统能力:** 以下各项对应的系统能力均为SystemCapability.Multimedia.Audio.Renderer
| 名称 | 类型 | 必填 | 说明 | | 名称 | 类型 | 可读 | 可写 | 说明 |
| --------------- | --------------------------- | ---- | ------------------------------------------------------------ | | --------------- | --------------------------- | ---- | ---- | ------------------------------------------------------------ |
| streamUsage | [StreamUsage](#streamusage) | 是 | 音频流使用类型。 | | streamUsage | [StreamUsage](#streamusage) | 是 | 是 | 音频流使用类型。 |
| contentType | [ContentType](#contenttype) | 是 | 音频打断媒体类型。 | | contentType | [ContentType](#contenttype) | 是 | 是 | 音频打断媒体类型。 |
| pauseWhenDucked | boolean | 是 | 音频打断时是否可以暂停音频播放(true表示音频播放可以在音频打断期间暂停,false表示相反)。 | | pauseWhenDucked | boolean | 是 | 是 | 音频打断时是否可以暂停音频播放(true表示音频播放可以在音频打断期间暂停,false表示相反)。 |
## InterruptAction<sup>(deprecated)</sup> ## InterruptAction<sup>(deprecated)</sup>
...@@ -4942,12 +4977,12 @@ tonePlayer.release().then(() => { ...@@ -4942,12 +4977,12 @@ tonePlayer.release().then(() => {
**系统能力:** 以下各项对应的系统能力均为SystemCapability.Multimedia.Audio.Renderer **系统能力:** 以下各项对应的系统能力均为SystemCapability.Multimedia.Audio.Renderer
| 名称 | 类型 | 必填 | 说明 | | 名称 | 类型 | 可读 | 可写 | 说明 |
| ---------- | ------------------------------------------- | ---- | ------------------------------------------------------------ | | ---------- | ------------------------------------------- | ---- | ---- | ------------------------------------------------------------ |
| actionType | [InterruptActionType](#interruptactiontype) | 是 | 事件返回类型。TYPE_ACTIVATED为焦点触发事件,TYPE_INTERRUPT为音频打断事件。 | | actionType | [InterruptActionType](#interruptactiontype) | 是 | 是 | 事件返回类型。TYPE_ACTIVATED为焦点触发事件,TYPE_INTERRUPT为音频打断事件。 |
| type | [InterruptType](#interrupttype) | 否 | 打断事件类型。 | | type | [InterruptType](#interrupttype) | 否 | 是 | 打断事件类型。 |
| hint | [InterruptHint](#interrupthint) | 否 | 打断事件提示。 | | hint | [InterruptHint](#interrupthint) | 否 | 是 | 打断事件提示。 |
| activated | boolean | 否 | 获得/释放焦点。true表示焦点获取/释放成功,false表示焦点获得/释放失败。 | | activated | boolean | 否 | 是 | 获得/释放焦点。true表示焦点获取/释放成功,false表示焦点获得/释放失败。 |
### setVolume<sup>(deprecated)</sup> ### setVolume<sup>(deprecated)</sup>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册