App-Android(使用App+htnl5框架,解决消息推送兼容SignalR问题)
loulijun2021
2022-09-21 32383daed1b498577da8c37145e66e2a93e28b2d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
<meta name="HandheldFriendly" content="true">
<meta name="MobileOptimized" content="320">
<title>Audio Document</title>
<link rel="stylesheet" type="text/css" href="res/doc.css" charset="utf-8">
<link rel="stylesheet" type="text/css" href="res/prettify.sons.css" charset="utf-8">
<script type="text/javascript" src="res/doc.js" charset="utf-8"></script><script type="text/javascript" src="res/prettify.js" charset="utf-8"></script>
</head>
<body><div id="content" class="content">
<h1><a name="plus.audio">audio</a></h1>
<p>Audio模块用于提供音频的录制和播放功能,可调用系统的麦克风设备进行录音操作,也可调用系统的扬声器设备播放音频文件。通过plus.audio获取音频管理对象。</p>
<h2>常量:</h2>
<ul>
<li>
<a href="#plus.audio.ROUTE_SPEAKER">ROUTE_SPEAKER</a>: 设备的扬声器音频输出线路</li>
<li>
<a href="#plus.audio.ROUTE_EARPIECE">ROUTE_EARPIECE</a>: 设备听筒音频输出线路</li>
</ul>
<h2>方法:</h2>
<ul>
<li>
<a href="#plus.audio.getRecorder">getRecorder</a>: 获取当前设备的录音对象</li>
<li>
<a href="#plus.audio.createPlayer">createPlayer</a>: 创建音频播放器对象</li>
</ul>
<h2>对象:</h2>
<ul>
<li>
<a href="#plus.audio.AudioRecorder">AudioRecorder</a>: 录音对象</li>
<li>
<a href="#plus.audio.AudioPlayer">AudioPlayer</a>: 音频播放对象</li>
<li>
<a href="#plus.audio.AudioPlayerEvent">AudioPlayerEvent</a>: 音频播放控件事件类型</li>
<li>
<a href="#plus.audio.AudioPlayerStyles">AudioPlayerStyles</a>: 音频播放对象的参数</li>
<li>
<a href="#plus.audio.AudioRecorderStyles">AudioRecorderStyles</a>: 音频录制的参数</li>
</ul>
<h2>回调方法:</h2>
<ul>
<li>
<a href="#plus.audio.RecordSuccessCallback">RecordSuccessCallback</a>: 录音操作成功回调</li>
<li>
<a href="#plus.audio.PlaySuccessCallback">PlaySuccessCallback</a>: 播放音频文件操作成功回调</li>
<li>
<a href="#plus.audio.AudioErrorCallback">AudioErrorCallback</a>: 音频操作失败回调</li>
</ul>
<h2>权限:</h2>
<p>5+功能模块(permissions)</p>
<pre class="prettyprint linenums">
{
// ...
"permissions":{
    // ...
    "Audio": {
        "description": "音频"
    }
}
}
            </pre>
<h1><a name="plus.audio.AudioRecorder">AudioRecorder</a></h1>
<p>录音对象</p>
<pre class="prettyprint linenums">
interface AudioRecorder {
    readonly attribute String[] supportedSamplerates;
    readonly attribute String[] supportedFormats;
    function record( option, successCB, errorCB );
    function stop();
}
                </pre>
<h2>属性:</h2>
<ul>
<li>
<a href="#plus.audio.AudioRecorder.supportedSamplerates">supportedSamplerates</a>: 数组,设备录音支持的采用率</li>
<li>
<a href="#plus.audio.AudioRecorder.supportedFormats">supportedFormats</a>: 数组,设备录音支持的文件格式</li>
</ul>
<h2>方法:</h2>
<ul>
<li>
<a href="#plus.audio.AudioRecorder.record">record</a>: 调用设备麦克风进行录音操作</li>
<li>
<a href="#plus.audio.AudioRecorder.stop">stop</a>: 结束录音操作</li>
</ul>
<h1><a name="plus.audio.AudioPlayer">AudioPlayer</a></h1>
<p>音频播放对象</p>
<pre class="prettyprint linenums">
interface AudioPlayer {
    function void close();
    function Boolean isPaused();
    function void play(successCB, errorCB);
    function void pause();
    function void resume();
    function void stop();
    function void seekTo(position);
    function Number getBuffered();
    function Number getDuration();
    function Number getPosition();
    function void setRoute(route);
    function void setSessionCategory(category);
}
                </pre>
<h2>说明:</h2>
<p class="des">
    音频播放对象,用于音频文件的播放。不能通过new方法直接创建,只能通过audio.createPlayer方法创建。
                </p>
<h2>方法:</h2>
<ul>
<li>
<a href="#plus.audio.AudioPlayer.addEventListener">addEventListener</a>: 添加事件监听器</li>
<li>
<a href="#plus.audio.AudioPlayer.close">close</a>: 关闭音频播放对象</li>
<li>
<a href="#plus.audio.AudioPlayer.getBuffered">getBuffered</a>: 音频缓冲的时间点</li>
<li>
<a href="#plus.audio.AudioPlayer.getDuration">getDuration</a>: 获取音频的总长度</li>
<li>
<a href="#plus.audio.AudioPlayer.getPosition">getPosition</a>: 获取音频的当前播放位置</li>
<li>
<a href="#plus.audio.AudioPlayer.getStyles">getStyles</a>: 音频播放的参数</li>
<li>
<a href="#plus.audio.AudioPlayer.isPaused">isPaused</a>: 当前是否暂停或停止状态</li>
<li>
<a href="#plus.audio.AudioPlayer.play">play</a>: 播放音频</li>
<li>
<a href="#plus.audio.AudioPlayer.pause">pause</a>: 暂停播放</li>
<li>
<a href="#plus.audio.AudioPlayer.removeEventListener">removeEventListener</a>: 移除事件监听器</li>
<li>
<a href="#plus.audio.AudioPlayer.resume">resume</a>: 恢复播放</li>
<li>
<a href="#plus.audio.AudioPlayer.seekTo">seekTo</a>: 跳到指定位置</li>
<li>
<a href="#plus.audio.AudioPlayer.stop">stop</a>: 停止播放</li>
<li>
<a href="#plus.audio.AudioPlayer.setRoute">setRoute</a>: 音频输出线路</li>
<li>
<a href="#plus.audio.AudioPlayer.setSessionCategory">setSessionCategory</a>: 设置音频播放模式</li>
<li>
<a href="#plus.audio.AudioPlayer.setStyles">setStyles</a>: 设置音频播放的参数</li>
</ul>
<h1><a name="plus.audio.AudioPlayerEvent">AudioPlayerEvent</a></h1>
<p>音频播放控件事件类型</p>
<h2>常量:</h2>
<ul>
<li>"canplay": <em>(<font class="type">String</font>
    类型
)</em>音频可以播放事件<br>
</li>
<li>"play": <em>(<font class="type">String</font>
    类型
)</em>音频播放事件<br>
</li>
<li>"pause": <em>(<font class="type">String</font>
    类型
)</em>音频暂停事件<br>
</li>
<li>"stop": <em>(<font class="type">String</font>
    类型
)</em>音频停止事件<br>
</li>
<li>"ended": <em>(<font class="type">String</font>
    类型
)</em>音频自然播放结束事件<br>
</li>
<li>"error": <em>(<font class="type">String</font>
    类型
)</em>音频播放错误事件<br>
</li>
<li>"waiting": <em>(<font class="type">String</font>
    类型
)</em>音频加载中事件<br>
</li>
<li>"seeking": <em>(<font class="type">String</font>
    类型
)</em>音频进行seek操作事件<br>
</li>
<li>"seeked": <em>(<font class="type">String</font>
    类型
)</em>音频完成seek操作事件<br>
</li>
<li>"prev": <em>(<font class="type">String</font>
    类型
)</em>上一曲操作事件<br><p>
    用户在后台播放控制器上点击上一曲按钮时触发,未开启后台控制器则不触发此事件。
                        </p>
</li>
<li>"next": <em>(<font class="type">String</font>
    类型
)</em>下一曲操作事件<br><p>
    用户在后台播放控制器上点击下一曲按钮时触发,未开启后台控制器则不触发此事件。
                        </p>
</li>
</ul>
<h1><a name="plus.audio.AudioPlayerStyles">AudioPlayerStyles</a></h1>
<p>音频播放对象的参数</p>
<h2>属性:</h2>
<ul>
<li>autoplay: <em>(<font class="type">Boolean</font>
    类型
)</em>是否自动开始播放<br><p>
    true - 自动开始播放;
    false - 不自动开始播放。
    默认值为false。
                        </p>
</li>
<li>backgroundControl: <em>(<font class="type">Boolean</font>
    类型
)</em>是否开启后台控制器<br><p>
    开启后应用切换到后台可继续播放音频。
    iOS平台在系统锁屏界面显示播放控件;Android平台暂不支持。
                        </p>
</li>
<li>coverImgUrl: <em>(<font class="type">String</font>
    类型
)</em>封面图地址<br><p>
    在后台播放控制器上显示,未开启后台控制器则不显示。
                        </p>
</li>
<li>epname: <em>(<font class="type">String</font>
    类型
)</em>专辑名<br><p>
    在后台播放控制器上显示,未开启后台控制器则不显示。
                        </p>
</li>
<li>loop: <em>(<font class="type">Boolean</font>
    类型
)</em>是否循环播放<br><p>
    true - 循环播放;
    false - 不循环播放。
    默认值为false。
                        </p>
</li>
<li>singer: <em>(<font class="type">String</font>
    类型
)</em>歌手名<br><p>
    在后台播放控制器上显示,未开启后台控制器则不显示。
                        </p>
</li>
<li>src: <em>(<font class="type">String</font>
    类型
)</em>音频资源的地址<br><p>
    支持本地路径和网络路径。
                        </p>
</li>
<li>startTime: <em>(<font class="type">Number</font>
    类型
)</em>开始播放的位置<br><p>
    单位为秒(s),默认值为0。
                        </p>
</li>
<li>title: <em>(<font class="type">String</font>
    类型
)</em>音频标题<br><p>
    在后台播放控制器上显示,未开启后台控制器则不显示。
                        </p>
</li>
<li>volume: <em>(<font class="type">Number</font>
    类型
)</em>音量<br><p>
    取值范围为0-1,默认值为1。
                        </p>
</li>
</ul>
<h1><a name="plus.audio.AudioRecorderStyles">AudioRecorderStyles</a></h1>
<p>音频录制的参数</p>
<h2>属性:</h2>
<ul>
<li>channels: <em>(<font class="type">String</font>
    类型
)</em>录音声道<br><p>
    可取值:
        "mono" - 单声道录音;
        "stereo" - 立体声道录音。
    默认值为"mono"。
                        </p>
</li>
<li>filename: <em>(<font class="type">String</font>
    类型
)</em>保存录音文件的路径<br><p>
    可设置具体文件名,也可只设置路径,如果以“/”结尾则表明是路径,文件名由录音程序自动生成。
    如未设置则使用默认目录生成随机文件名称,默认目录为应用%APPID%下的documents目录。
                        </p>
</li>
<li>samplerate: <em>(<font class="type">String</font>
    类型
)</em>录音文件的采样率<br><p>
    需通过supportedSamplerates属性获取设备支持的采样率,若设置无效的值,则使用系统默认的采样率。</p>
</li>
<li>format: <em>(<font class="type">String</font>
    类型
)</em>录音文件的格式<br><p>
    需通过supportedFormats属性获取设备支持的录音格式,若设置无效的值,则使用系统默认的录音格式。
                        </p>
</li>
</ul>
<h1><a name="plus.audio.RecordSuccessCallback">RecordSuccessCallback</a></h1>
<p>录音操作成功回调</p>
<pre class="prettyprint linenums">
void onSuccess( recordFile ) {
    // Get record file code.
}
                </pre>
<h2>说明:</h2>
<p class="des">麦克风录音操作成功的回调函数,在录音操作完成调用stop()方法时调用。</p>
<h2>参数:</h2>
<ul><li>recordFile: 
        <em>(
            <font class="type">String</font>
            )
            必选 </em>录音操作保存的音频文件路径<br>
</li></ul>
<h2>返回值:</h2>
<font class="type">void</font>
            : 无<h1><a name="plus.audio.PlaySuccessCallback">PlaySuccessCallback</a></h1>
<p>播放音频文件操作成功回调</p>
<pre class="prettyprint linenums">
void onCompleted() {
    // Play audio file completed code.
}
                </pre>
<h2>说明:</h2>
<p class="des">
    音频播放操作成功的回调函数,在音频播放完成或调用stop()方法时触发。
                </p>
<h2>参数:</h2>
<p>无</p>
<h2>返回值:</h2>
<font class="type">void</font>
            : 无<h1><a name="plus.audio.AudioErrorCallback">AudioErrorCallback</a></h1>
<p>音频操作失败回调</p>
<pre class="prettyprint linenums">
void onError( error ) {
    // Handle audio error
}
                </pre>
<h2>参数:</h2>
<ul><li>error: 
        <em>(
            <font class="type">DOMException</font>
            )
            必选 </em>音频操作的错误信息<br>
</li></ul>
<h2>返回值:</h2>
<font class="type">void</font>
            : 无<br><br>
</div></body>
</html>