android与phonegap的相互交互
开发环境:android SDK+android2.3或以上的真机
开发所需:cordova-2.1.0.js+sencha-touch-all-debug.js
首先把你的phonegap或sehcha项目放到assets文件夹下,然后在你的入口函数(onCreate)里添加如下:
super.init(); super.setBooleanProperty("loadInWebView", true); super.setIntegerProperty("loadUrlTimeoutValue", 60000); //在模拟器测试上使用.不然会出错 //加splashScreen super.setIntegerProperty("splashscreen", R.drawable.welcome); this.appView.setBackgroundColor(0); this.appView.setBackgroundResource(R.drawable.welcome); super.loadUrl(file:///android_asset/PagoClient/index.html);
这样就可以在你的机器上运行了.注意,我这里用的是2.1.0的cordova包,只支持android系统2.3/以上的真机!!!!!!!!!!!!!
如果要在phonegap或sencha端调用android端的代码就需要用插件的方式来做:
1,创建一个继承了Plugin的类
public class pluginClass extends Plugin{ public static final String ACTION = "codetest"; public static final String ACTION_INTENT_TEST = "com.terry.broadcast.test"; @Override public PluginResult execute(String action, JSONArray data, String callbackId) { // TODO Auto-generated method stub if(ACTION.equals(action)){ Intent intent = new Intent(ctx.getContext(), CaptureActivity.class);//你想去的activity(exp:Temp) ctx.startActivity(intent); } return null; } }
2,在项目的res/xml/config.xml文件加一个plugin
<plugin name="plugintest" value="com.example.senchapago.pluginClass"/>
name是你自字的名字,value是继承了plugin类的所在类的路径
3,在phonegap项目里的cordova-2.1.0.js文件最后添加以下代码:
//tovar testAndroid01API=function(){}; testAndroid01API.prototype.test = function(params, success, fail){ return PhoneGap.exec( function(args){ success(args); }, function(args){ fail(args); }, 'plugintest', //java类 'codetest', //action [params] //params );};PhoneGap.addConstructor(function() {PhoneGap.addPlugin('testAndroid01API', new testAndroid01API());}); if(!window.plugins) { window.plugins = {};}if (!window.plugins.testAndroid01API) { window.plugins.testAndroid01API = new testAndroid01API();}
4,最后在你需要触发的地方加上:
window.plugins.testAndroid01API.test(null,function(r){},function(e){});
这样就可以调用android的Activiy类了,
同理.如果你的在android端把数据传给phonegap端,流程大概与上面的步骤想似:
1,2步一样,第3步是:
PhoneGap.addConstructor(function() {PhoneGap.addPlugin('testAndroid02API', new testAndroid02API());});
//resultvar testAndroid02API=function(){}; testAndroid02API.prototype.test = function(success, error, qrcodeData){ return PhoneGap.exec( success, error, 'resulttest', //java类名,plugins.xml中注册的名字 'resultcode', //action,Java方法中用来匹配的字段 [qrcodeData] //params 传递的参数,Array形式 ); };
if(!window.plugins) { window.plugins = {};}
if (!window.plugins.testAndroid02API) { window.plugins.testAndroid02API = new testAndroid02API();}
4,是在你需要返回结果的地方添加:
var success = function(data){ //当Java方法返回成功时,通过data.key 获得Java中传来的JSONObject数据 //alert("1111111 : " + data.testData1 + ' and 2222222 : ' + data.testData2); Ext.getCmp('txt_').setValue(data.qrcodeData); }; var error = function(e){ //Ext.getCmp('txt_').setValue(e); }; window.plugins.testAndroid02API.test(success, error, null);
这样就可以把数据传递了,当然是你继承了plugin的类中处理方式也是有不同的,例如:
public class resultClass extends Plugin{
public static final String ACTION = "resultcode";
PluginResult result = null; JSONObject jsonObj = new JSONObject();//可以返回给JS的JSON数据 private SharedPreferences mPref; @Override public PluginResult execute(String action, JSONArray data, String callbackId) { mPref = PreferenceManager.getDefaultSharedPreferences(ctx.getContext());if(ACTION.equals(action)){String resultCode = mPref.getString("qr_code_result", null);while (resultCode==null || resultCode.length()==0) {//循环获取qr_code_result,直到有值resultCode = mPref.getString("qr_code_result", null);}resultCode = mPref.getString("qr_code_result", null);if(resultCode.length() != 0 ){try {jsonObj.put("qrcodeData", resultCode);mPref.edit().remove("qr_code_result").commit();} catch (JSONException e) {e.printStackTrace();} System.out.println("有值!");result = new PluginResult(PluginResult.Status.OK, jsonObj); //返回成功时,将Java代码处理过的JSON数据返回给JS }else{System.out.println("无值!");result = null;} } return result; } }
完!
更多相关文章
- 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
- “罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?
- Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
- 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
- Android自带的几种Activirty
- Android(安卓)学习笔记 databinding简单使用:使用databinding在li
- Android使用Handler实现倒计时功能
- android绘制几何图形的实例代码
- android Dialog 各种Dialog 三个选项的、进度条的、单选的、多选