Cordova插件开发(Android、iOS)
来源:互联网 发布:职人咖啡 知乎 编辑:程序博客网 时间:2024/05/17 00:55
首先,在任意目录下创建一个插件目录,本例目录名为com.anasit.callnative,然后在com.anasit.callnative目录下新建src、www两个目录,src中存放的是对应平台的插件代码,www存放的是插件的js代码,再新建一个plugin.xml文件,写入的是插件的相关配置信息,本例只开发了android和iOS两个平台,所以在src下再新建android和ios两个目录。
var exec = require('cordova/exec');
var CallNative = {
//调用Activity或Controller
call:function(rtspUrl) {
exec(
function(echoValue){console.log("call CallNativePlugin success");},
function(echoValue) {console.log("CallNativePlugin is not exist");},
"CallNativePlugin",
"play_rtsp",
//在android平台中只是Action,在iOS中是实现类中的方法名
[
"cn.kigsir.jpushdemo.PlayRTSPActivity",
rtspUrl
]
);
}
}
module.exports = CallNative;
在使用时,先用script标签引入callNative.js,然后通过cordova.plugins.CallNativePlugin.call(rtspUrl);调用即可,html中的调用代码此处先不详述。
public class CallActivityPlugin extends CordovaPlugin {
private final String ACTION_FLAG = "play_rtsp";//传入的action参照
@Override
public boolean execute(String action, final JSONArray args, final CallbackContext callbackContext) throws JSONException {
if (ACTION_FLAG.equals(action)) {//action是javascript的exec()方法传入的第4个参数
try {
//此处是通过类名获取到目标Activity类,在javascript代码中传入,必须带完整包名
cordova.startActivityForResult(CallActivityPlugin.this, new Intent(cordova.getActivity(), Class.forName(args.getString(0))), 1);
callbackContext.success();//保证线程安全
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return true;
}
return false;
}
}
类中使用到的包自行导入。
2、新建一个目标Activity,并配置到清单文件中,然后把此Activity的完整路径(包名一定要完整)copy到callNative.js中相应的参数表(此例中是"cn.kigsir.jpushdemo.PlayRTSPActivity")。
头文件部分(CallNativePlugin.h):
#import <Cordova/CDV.h>
@interface CallNativePlugin : CDVPlugin
- (void)play_rtsp:(CDVInvokedUrlCommand*)command;
@end
具体实现部分(CallNativePlugin.m):
#import "CallNativePlugin.h"
#import <Cordova/CDV.h>
#import "KxMovieViewController.h"
@implementation CallNativePlugin
- (void)play_rtsp:(CDVInvokedUrlCommand *)command{
KxMovieViewController *vc = [KxMovieViewController movieViewControllerWithContentPath:[command.arguments objectAtIndex:1] parameters:nil];
NSLog([command.arguments objectAtIndex:1]);
[self.viewController presentViewController:vc animated:YES completion:nil];
}
@end
2、新建自己的Controller作为跳转目标,取代上文中的KxMovieViewController即可。
3、本项目使用ionic做UI,iOS原生使用KxMovie播放rtsp,在做移植的时候KxMovie在普通工程中可以直接使用,当移植到Cordova项目中却报了一大堆错,在死了许多脑细胞之后,终于解决了问题,在工程中导入了以下framework后编译通过,顺便在这提一下,希望可以帮到大家,具体framework如下:
Accelerate.framework、
OpenGLES.framework、
AudioToolbox.framework、
CoreVideo.framework
<?xml version="1.0" encoding="UTF-8"?>
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
id="com.anasit.callNative"
version="0.0.1">
<name>CallNativePlugin</name>
<description>Anasit Call Native Plugin</description>
<license>Apache 2.0</license>
<keywords>call native</keywords>
<js-module name="CallNativePlugin" src="www/callNative.js">
<!--target是调用插件的方法名前缀,完整调用见上文-->
<clobbers target="cordova.plugins.CallNativePlugin"/>
</js-module>
<!-- android -->
<platform name="android">
<config-file target="res/xml/config.xml" parent="/*">
<feature name="CallNativePlugin">
<param name="android-package" value="cn.kigsir.jpushdemo.plugins.CallActivityPlugin" />
</feature>
</config-file>
<source-file src="src/android/CallActivityPlugin.java" target-dir="src/cn/kigsir/jpushdemo/plugins"/>
</platform>
<!-- ios -->
<platform name="ios">
<config-file target="config.xml" parent="/*">
<feature name="CallNativePlugin">
<param name="ios-package" value="CallControllerPlugin" />
</feature>
</config-file>
<header-file src="src/ios/CallControllerPlugin.h" />
<source-file src="src/ios/CallControllerPlugin.m" />
</platform>
</plugin>
在项目根目录下打开命令行,输入cordova plugin add com.anasit.callNative(注:根据自己设置的路径写),按下回车后,插件就会自动安装到项目根目录下的plugins目录中。
一、javascript部分
代码:(callNative.js,存放于com.anasit.callnative/www)var exec = require('cordova/exec');
var CallNative = {
//调用Activity或Controller
call:function(rtspUrl) {
exec(
function(echoValue){console.log("call CallNativePlugin success");},
function(echoValue) {console.log("CallNativePlugin is not exist");},
"CallNativePlugin",
"play_rtsp",
//在android平台中只是Action,在iOS中是实现类中的方法名
[
"cn.kigsir.jpushdemo.PlayRTSPActivity",
rtspUrl
]
);
}
}
module.exports = CallNative;
在使用时,先用script标签引入callNative.js,然后通过cordova.plugins.CallNativePlugin.call(rtspUrl);调用即可,html中的调用代码此处先不详述。
二、android native部分
1、插件类的实现public class CallActivityPlugin extends CordovaPlugin {
private final String ACTION_FLAG = "play_rtsp";//传入的action参照
@Override
public boolean execute(String action, final JSONArray args, final CallbackContext callbackContext) throws JSONException {
if (ACTION_FLAG.equals(action)) {//action是javascript的exec()方法传入的第4个参数
try {
//此处是通过类名获取到目标Activity类,在javascript代码中传入,必须带完整包名
cordova.startActivityForResult(CallActivityPlugin.this, new Intent(cordova.getActivity(), Class.forName(args.getString(0))), 1);
callbackContext.success();//保证线程安全
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return true;
}
return false;
}
}
类中使用到的包自行导入。
2、新建一个目标Activity,并配置到清单文件中,然后把此Activity的完整路径(包名一定要完整)copy到callNative.js中相应的参数表(此例中是"cn.kigsir.jpushdemo.PlayRTSPActivity")。
三、iOS native部分
1.插件类的实现头文件部分(CallNativePlugin.h):
#import <Cordova/CDV.h>
@interface CallNativePlugin : CDVPlugin
- (void)play_rtsp:(CDVInvokedUrlCommand*)command;
@end
具体实现部分(CallNativePlugin.m):
#import "CallNativePlugin.h"
#import <Cordova/CDV.h>
#import "KxMovieViewController.h"
@implementation CallNativePlugin
- (void)play_rtsp:(CDVInvokedUrlCommand *)command{
KxMovieViewController *vc = [KxMovieViewController movieViewControllerWithContentPath:[command.arguments objectAtIndex:1] parameters:nil];
NSLog([command.arguments objectAtIndex:1]);
[self.viewController presentViewController:vc animated:YES completion:nil];
}
@end
2、新建自己的Controller作为跳转目标,取代上文中的KxMovieViewController即可。
3、本项目使用ionic做UI,iOS原生使用KxMovie播放rtsp,在做移植的时候KxMovie在普通工程中可以直接使用,当移植到Cordova项目中却报了一大堆错,在死了许多脑细胞之后,终于解决了问题,在工程中导入了以下framework后编译通过,顺便在这提一下,希望可以帮到大家,具体framework如下:
Accelerate.framework、
OpenGLES.framework、
AudioToolbox.framework、
CoreVideo.framework
四、plugin.xml部分
在插件根目录下我们创建的plugin.xml中写入以下代码<?xml version="1.0" encoding="UTF-8"?>
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
id="com.anasit.callNative"
version="0.0.1">
<name>CallNativePlugin</name>
<description>Anasit Call Native Plugin</description>
<license>Apache 2.0</license>
<keywords>call native</keywords>
<js-module name="CallNativePlugin" src="www/callNative.js">
<!--target是调用插件的方法名前缀,完整调用见上文-->
<clobbers target="cordova.plugins.CallNativePlugin"/>
</js-module>
<!-- android -->
<platform name="android">
<config-file target="res/xml/config.xml" parent="/*">
<feature name="CallNativePlugin">
<param name="android-package" value="cn.kigsir.jpushdemo.plugins.CallActivityPlugin" />
</feature>
</config-file>
<source-file src="src/android/CallActivityPlugin.java" target-dir="src/cn/kigsir/jpushdemo/plugins"/>
</platform>
<!-- ios -->
<platform name="ios">
<config-file target="config.xml" parent="/*">
<feature name="CallNativePlugin">
<param name="ios-package" value="CallControllerPlugin" />
</feature>
</config-file>
<header-file src="src/ios/CallControllerPlugin.h" />
<source-file src="src/ios/CallControllerPlugin.m" />
</platform>
</plugin>
五、插件安装部分
在项目根目录下打开命令行,输入cordova plugin add com.anasit.callNative(注:根据自己设置的路径写),按下回车后,插件就会自动安装到项目根目录下的plugins目录中。
注:本例所使用的cordova版本是5.3.3
By:BeanYon
2015.11.1
2015.11.1
0 0
- Cordova插件开发(Android、iOS)
- Cordova 插件开发(Android)
- Cordova+ ios 插件开发
- Cordova-Android 插件开发
- (2)cordova android自定义插件开发
- Android Cordova 插件开发之Cordova安装
- Android Cordova 插件开发之Cordova安装
- Android Cordova 插件开发之Cordova安装
- Cordova之Android插件开发
- cordova开发插件步骤及小结(android插件)
- Cordova开发之IOS插件开发
- android cordova插件开发(纯js插件)
- Cordova for iOS-插件开发(二)
- Cordova for iOS-插件开发(三)
- cordova iOS平台的插件开发
- Cordova 插件开发(plugin)
- Cordova插件开发(二)
- 【前端】Cordova自定义插件开发步骤(基于Android)
- 操作系统与网络实现 之六
- 谈面向对象之强依赖和弱依赖
- poj--2001--Shortest Prefixes(字典树)
- 各大团队的初始化CSS代码
- FormBorderStyle设为None,移动Winform窗口的两种方法
- Cordova插件开发(Android、iOS)
- 树的子结构
- linux下查看和添加PATH环境变量
- 接口返回值规则
- iOS nslog 使用 十六进制输出
- BestCoder Round #61 (div.2)(hdu5522,hdu5523,hdu5524,hdu5525(数论:费马小定理))
- springMVC aop
- public private 和protected 继承
- SQL的四种连接-左外连接、右外连接、内连接、全连接