提供对设备音频、图像和视频采集功能的访问。对象:
Capture
CaptureAudioOptions
CaptureImageOptions
CaptureVideoOptions
CaptureCB
CaptureErrorCB
ConfigurationData
MediaFile
MediaFileData
方法:
capture.captureAudio
capture.captureImage
capture.captureVideo
MediaFile.getFormatData
范围:capture对象被分配给navigator.device对象,因此作用域为全局范围。简单的范例:
// 全局范围的capture对象
var capture = navigator.device.capture;
复制代码
属性:
supportedAudioModes:当前设备所支持的音频录制格式。(ConfigurationData[] 类型)
supportedImageModes:当前设备所支持的拍摄图像尺寸及格式。(ConfigurationData[] 类型)
supportedVideoModes:当前设备所支持的拍摄视频分辨率及格式。(ConfigurationData[] 类型)
方法:
capture.captureAudio:启动设备录制音频剪辑的音频录制应用程序。
capture.captureImage:启动设备拍摄照片的摄像头应用程序。
capture.captureVideo:启动设备拍摄视频的视频录制应用程序。
支持的平台:
Android
BlackBerry WebWorks (OS 5.0或更高版本)
iOS
capture.captureAudio启动录音机应用程序并返回采集的音频剪辑文件。
navigator.device.capture.captureAudio(CaptureCB captureSuccess,
CaptureErrorCB captureError, [CaptureAudioOptions options] );
复制代码
说明:该方法通过设备默认的音频录制应用程序开始一个异步操作以采集音频录制。该操作允许设备用户在一个会话中同时采集多个录音。当用户退出音频录制应用程序,或系统到达CaptureAudioOptions的limit参数所定义的最大录制数时都会停止采集操作。如果没有设置limit参数的值,则使用其默认值1,也就是说当用户录制好一个音频剪辑后采集操作就会终止。当采集操作结束后,系统会调用CaptureCB回调函数,传递一个包含所有采集到的音频剪辑文件的MediaFile对象数组。如果用户在完成一个音频剪辑采集之前终止采集操作,系统会调用CaptureErrorCB回调函数,并传递一个包含CaptureError.CAPTURE_NO_MEDIA_FILES错误代码的CaptureError对象。支持的平台:
Android
BlackBerry WebWorks (OS 5.0或更高版本)
iOS
简单的范例:
// 采集操作成功完成后的回调函数
var captureSuccess = function(mediaFiles) {
var i, path, len;
for (i = 0, len = mediaFiles.length; i < len; i += 1) {
path = mediaFiles[i].fullPath;
// 对文件进行感兴趣的操作
}
};
// 采集操作出错后的回调函数
var captureError = function(error) {
navigator.notification.alert('Error code: ' + error.code, null, 'Capture Error');
};
// 开始采集音频
navigator.device.capture.captureAudio(captureSuccess, captureError, {limit:2});
复制代码
完整的范例:
Capture Audio// 采集操作成功完成后的回调函数
function captureSuccess(mediaFiles) {
var i, len;
for (i = 0, len = mediaFiles.length; i < len; i += 1) {
uploadFile(mediaFiles[i]);
}
}
// 采集操作出错后的回调函数
function captureError(error) {
var msg = 'An error occurred during capture: ' + error.code;
navigator.notification.alert(msg, null, 'Uh oh!');
}
// “Capture Audio”按钮点击事件触发函数
function captureAudio() {
// 启动设备的音频录制应用程序,
// 允许用户最多采集2个音频剪辑
navigator.device.capture.captureAudio(captureSuccess, captureError, {limit: 2});
}
// 上传文件到服务器
function uploadFile(mediaFile) {
var ft = new FileTransfer(),
path = mediaFile.fullPath,
name = mediaFile.name;
ft.upload(path,
"http://my.domain.com/upload.php",
function(result) {
console.log('Upload success: ' + result.responseCode);
console.log(result.bytesSent + ' bytes sent');
},
function(error) {
console.log('Error uploading file ' + path + ': ' + error.code);
},
{ fileName: name });
}
Capture Audio
复制代码
BlackBerry WebWorks的特异情况:
在BlackBerry WebWorks上,PhoneGap会尝试启动RIM提供的Voice Notes Recorder应用程序来采集音频录制。如果设备没有安装该应用程序,开发者会收到一个CaptureError.CATURE_NOT_SUPPORTED错误代码。
iOS的特异情况:
iOS没有默认的音频录制应用程序,因此仅提供一个简单的用户界面。
CaptureAudioOptions封装音频采集的配置选项。属性:
limit:在单个采集操作期间能够记录的音频剪辑数量最大值,必须设定为大于等于1(默认值为1)。
drration:一个音频剪辑的最长时间,单位为秒。
mode:选定的音频模式,必须设定为capture.supportedAudioModes枚举中的值。
简单的范例:
// 限制采集上限为3个媒体文件,每个文件不超过10秒
var options = { limit: 3, duration: 10 };
navigator.device.capture.captureAudio(captureSuccess, captureError, options);
复制代码
Android的特异情况:
不支持duration参数,无法通过程序限制录制长度。
不支持mode参数,无法通过程序修改音频录制格式。使用自适应多速率(AMR)格式(audio/amr)进行音频录制编码。
BlackBerry WebWorks的特异情况:
不支持duration参数,无法通过程序限制录制长度。
不支持mode参数,无法通过程序修改音频录制格式。使用自适应多速率(AMR)格式(audio/amr)进行音频录制编码。
iOS的特异情况:
不支持limit参数,每次调用只能创建一个录制。
不支持mode参数,无法通过程序修改音频录制格式。使用波形音频(WAV)格式(audio/wav)进行音频录制编码。
capture.captureImage[url=]开启摄像头应用程序,返回采集到的图像文件信息。
[/url]
navigator.device.capture.captureImage(
CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureImageOptions options]
);
复制代码
说明:
该方法通过设备的摄像头应用程序开始一个异步操作以采集图像。该操作允许设备用户在一个会话中同时采集多个图像。
当用户退出摄像头应用程序,或系统到达CaptureImageOptions的limit参数所定义的最大图像数时都会停止采集操作。如果没有设置limit参数的值,则使用其默认值1,也就是说当用户采集到一个图像后采集操作就会终止。
当采集操作结束后,系统会调用CaptureCB回调函数,传递一个包含每个采集到的图像文件的MediaFile对象数组。如果用户在完成一个图像采集之前终止采集操作,系统会调用CaptureErrorCB回调函数,并传递一个包含CaptureError.CAPTURE_NO_MEDIA_FILES错误代码的CaptureError对象。
支持的平台:
Android
BlackBerry WebWorks (OS 5.0或更高版本)
iOS
简单的范例:
复制代码
// 采集操作成功完成后的回调函数
var captureSuccess = function(mediaFiles) {
var i, path, len;
for (i = 0, len = mediaFiles.length; i < len; i += 1) {
path = mediaFiles[i].fullPath;
// 对文件进行感兴趣的操作
}
};
// 采集操作出错后的回调函数
var captureError = function(error) {
navigator.notification.alert('Error code: ' + error.code, null, 'Capture Error');
};
// 开始采集图像
navigator.device.capture.captureImage(captureSuccess, captureError, {limit:2});
复制代码
完整的范例:
Capture Image// 采集操作成功完成后的回调函数
function captureSuccess(mediaFiles) {
var i, len;
for (i = 0, len = mediaFiles.length; i < len; i += 1) {
uploadFile(mediaFiles[i]);
}