今天主要了解了这么几个点,一个是有关MQTT的,当然,现在还是不知道那个mosquitto那边是怎样把数据返回的,只是了解了一下安卓这边的代码是什么意思,然后发现,如果想在cordova里面调用mqtt的类和方法的话,应该有两个方法,一是重写扩展WebView,二是插件开发呗,我怕改写WebView里面的方法,会对cordova有影响,也正好想学习一下cordova的插件开发,然后就一直在看教程,实验插件的用法,发现调试太恶心了,不过后来还是发现了一些提高调试速度的方法,那就是插件先不统一写在plugin里面,直接在包里面写,然后在config.xml里面用feature注册,然后,直接在www里用js调用,就可以了,编辑器此处本人使用的为eclipse安装有andorid和web开发环境,这样把项目导入进来之后,既可以改android部分的代码还可以改前端的代码,代码如下:
过程如下:
- 将工程导入到eclipse
- 有木有发现assets里的一个文件_where-is-www.txt,就是打开项止属性,改filter,删除之后,在assets里就有了www目录,网页代码就可以直接在这个里面进行修改了
- 配置assets目录下的cordova_plugins.js
- 然后在plugin下写javascript接口
- 在res/xml里配置config文件
- 在src里写java文件就可以了代码如下:
config.xml
<feature name="Push">
<param name="android-package" value="com.xyzh.plugin.Push" />
</feature>
Push.java
public class Push extends CordovaPlugin{
@Override
public boolean execute(String action, JSONArray args,
CallbackContext callbackContext) throws JSONException {
if(action.equals("push")) {
callbackContext.success(args.getString(0) != "" ? args.getString(0) : "nothing to push");
} else {
callbackContext.error("call the non-method.");
}
return true;
}
}
Controller.js
angular.element(document).ready(function() {
window.push = function(str, callback) {
cordova.exec(callback, function(err) {
callback(err);
}, "Push", "push", [str]);
};
window.push("Push-word", function(echoValue) {
alert(echoValue);
alert(echoValue == "echome");
});
});
MQTT在cordova中直接调用service方法会报错,根据一步步追踪调试发现问题为:
Network on main thread 妹的,是老问题,主线程中调用了网络