Swift - 在现有的项目中添加Cordova支持2(添加Cordova插件)
作者:hangge | 2016-04-30 06:45
在前文(Swift - 在现有的项目中添加Cordova支持1(添加Cordova核心库)) 中,我介绍了如何往现有的工程项目中添加 Cordova。而 Cordova 最大优势就是提供了许许多多插件供我们安装使用(比如相机、定位、联系人等等),我们通过 js 就可以简单地调用这些功能,而不用再调用系统API。
如过是一个Cordova工程,只需运行“cordova plugin add xxxx”命令就可以自动添加需要的插件。而对于前文那样,是后来把Cordova再内嵌进来的 Swift 项目,也是可以使用各种Cordova插件的,只需稍加配置即可。
还是接着上文的 iOS 工程为例,前面已经添加了Cordova库了(整个目录结构如下),本文再添加 camera 插件进来。
1,添加Cordova插件相关文件到Swift项目文件夹下
(2)将 MyCordova/platforms/ios/www/plugins下的 cordova-plugin-camera 拷贝到 MySwiftProject/www/plugins 下

(3)将 MyCordova/platforms/ios/www/cordova_plugins.js 里插件相关内容添加 MySwiftProject/www/cordova_plugins.js 中去
2,配置Swift项目相关内容
(1)在工程中建立一个 Plugins 文件夹,将 MyCordova/platforms/ios/HelloCordova/Plugins下的 cordova-plugin-camera 拖到刚建的那个文件夹中。
这样就把摄像头相关的iOS实现类添加进来了。
(3)在 config.xml 中添加 camera插件的配置
3,测试运行
(2)使用真机调试,可以看到成功调用摄像头拍照并显示
如过是一个Cordova工程,只需运行“cordova plugin add xxxx”命令就可以自动添加需要的插件。而对于前文那样,是后来把Cordova再内嵌进来的 Swift 项目,也是可以使用各种Cordova插件的,只需稍加配置即可。
还是接着上文的 iOS 工程为例,前面已经添加了Cordova库了(整个目录结构如下),本文再添加 camera 插件进来。

1,添加Cordova插件相关文件到Swift项目文件夹下
(1)进入前文创建的Cordova项目文件夹(MyCordova),运行如下命令添加camera插件:
cordova plugin add cordova-plugin-camera
(2)将 MyCordova/platforms/ios/www/plugins下的 cordova-plugin-camera 拷贝到 MySwiftProject/www/plugins 下

(3)将 MyCordova/platforms/ios/www/cordova_plugins.js 里插件相关内容添加 MySwiftProject/www/cordova_plugins.js 中去
cordova.define('cordova/plugin_list', function(require, exports, module) {
module.exports = [
{
"file": "plugins/cordova-plugin-camera/www/CameraConstants.js",
"id": "cordova-plugin-camera.Camera",
"pluginId": "cordova-plugin-camera",
"clobbers": [
"Camera"
]
},
{
"file": "plugins/cordova-plugin-camera/www/CameraPopoverOptions.js",
"id": "cordova-plugin-camera.CameraPopoverOptions",
"pluginId": "cordova-plugin-camera",
"clobbers": [
"CameraPopoverOptions"
]
},
{
"file": "plugins/cordova-plugin-camera/www/Camera.js",
"id": "cordova-plugin-camera.camera",
"pluginId": "cordova-plugin-camera",
"clobbers": [
"navigator.camera"
]
},
{
"file": "plugins/cordova-plugin-camera/www/ios/CameraPopoverHandle.js",
"id": "cordova-plugin-camera.CameraPopoverHandle",
"pluginId": "cordova-plugin-camera",
"clobbers": [
"CameraPopoverHandle"
]
}
];
module.exports.metadata =
// TOP OF METADATA
{
"cordova-plugin-whitelist": "1.2.2",
"cordova-plugin-compat": "1.0.0",
"cordova-plugin-camera": "2.2.0"
}
// BOTTOM OF METADATA
});
2,配置Swift项目相关内容
(1)在工程中建立一个 Plugins 文件夹,将 MyCordova/platforms/ios/HelloCordova/Plugins下的 cordova-plugin-camera 拖到刚建的那个文件夹中。


(2)在桥接头文件 MySwiftProject-Bridging-Header.h 中将camera插件头文件引用进来
#import <Cordova/CDVViewController.h> #import <Cordova/CDVCommandDelegateImpl.h> #import <Cordova/CDVCommandQueue.h> #import <Cordova/CDVPlugin.h> #import "CDVCamera.h"
(3)在 config.xml 中添加 camera插件的配置
<feature name="Camera">
<param name="ios-package" value="CDVCamera" />
</feature>
3,测试运行
(1)将 www/index.html 内容修改如下:
<!DOCTYPE html>
<html>
<head>
<title>Capture Photo</title>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<script type="text/javascript" charset="utf-8" src="cordova.js"></script>
<script type="text/javascript" charset="utf-8">
var destinationType;
document.addEventListener("deviceready",onDeviceReady,false);
//Cordova加载完成会触发
function onDeviceReady() {
destinationType=navigator.camera.DestinationType;
}
//拍照
function capturePhoto() {
//拍照并获取Base64编码的图像(quality : 存储图像的质量,范围是[0,100])
navigator.camera.getPicture(onPhotoDataSuccess, onFail, { quality: 50,
destinationType: destinationType.DATA_URL }
);
}
//拍照成功
function onPhotoDataSuccess(imageData) {
console.log(imageData);
var smallImage = document.getElementById('smallImage');
smallImage.style.display = 'block';
smallImage.src = "data:image/jpeg;base64," + imageData;
}
//拍照失败
function onFail(message) {
alert('拍照失败: ' + message);
}
</script>
</head>
<body style="padding-top:50px">
<button style="font-size:23px;" onclick="capturePhoto();">拍摄照片</button> <br>
<img style="display:none;width:240px;height:320px;" id="smallImage" src="" />
</body>
</html>
(2)使用真机调试,可以看到成功调用摄像头拍照并显示

全部评论(2)
站长您好,这里的上一批地址错咯~正确地址是:http://www.hangge.com/blog/cache/detail_1155.html
站长回复:谢谢你的提醒,这里链接确实写错了。现已修正。
站长你好,我初学cordova iOS,很感谢能在你这里入门。
我使用cordova加载远程的web网页,设置了wwwFolderName和startPage,并在config.xml里面设置了白名单后,的确可以加载该网页了。 但是网页内的视频播放这一块却是黑的,请问这是什么原因呢? 我不太懂h5这一块。
http://cfyx2.hnjztz.com/toIndex.htm 加载的就是这个地址
站长回复:看了下这个网页是用FlashPlayer播放视频的,而iOS是不支持Flash的,自然无法播放。