android与phonegap的相互交互

开发环境:android SDK+android2.3或以上的真机

开发所需:cordova-2.1.0.js+sencha-touch-all-debug.js

 

首先把你的phonegap或sehcha项目放到assets文件夹下,然后在你的入口函数(onCreate)里添加如下:

[java]  view plain copy
  1. super.init();  
  2. super.setBooleanProperty("loadInWebView"true);   
  3. super.setIntegerProperty("loadUrlTimeoutValue"60000); //在模拟器测试上使用.不然会出错  
  4. //加splashScreen  
  5. super.setIntegerProperty("splashscreen", R.drawable.welcome);  
  6. this.appView.setBackgroundColor(0);  
  7. this.appView.setBackgroundResource(R.drawable.welcome);  
  8.   
  9. super.loadUrl(<a href="file:///android_asset/PagoClient/index.html">file:///android_asset/PagoClient/index.html</a>);  


这样就可以在你的机器上运行了.注意,我这里用的是2.1.0的cordova包,只支持android系统2.3/以上的真机!!!!!!!!!!!!!

 

如果要在phonegap或sencha端调用android端的代码就需要用插件的方式来做:

1,创建一个继承了Plugin的类

[java]  view plain copy
  1. public class pluginClass extends Plugin{  
  2.   
  3.     public static final String ACTION = "codetest";  
  4.     public static final String ACTION_INTENT_TEST = "com.terry.broadcast.test";  
  5.   
  6.     @Override  
  7.     public PluginResult execute(String action, JSONArray data, String callbackId) {  
  8.         // TODO Auto-generated method stub  
  9.         if(ACTION.equals(action)){  
  10.             Intent intent = new Intent(ctx.getContext(), CaptureActivity.class);//你想去的activity(exp:Temp)  
  11.        ctx.startActivity(intent);  
  12.         }  
  13.         return null;  
  14.     }  
  15.       
  16. }  

2,在项目的res/xml/config.xml文件加一个plugin

          <plugin name="plugintest" value="com.example.senchapago.pluginClass"/>

name是你自字的名字,value是继承了plugin类的所在类的路径

 

3,在phonegap项目里的cordova-2.1.0.js文件最后添加以下代码:

[java]  view plain copy
  1. //to  
  2. var testAndroid01API=function(){};      
  3.   
  4. testAndroid01API.prototype.test = function(params, success, fail){  
  5.     return PhoneGap.exec(  
  6.                 function(args){  
  7.                     success(args);  
  8.                 },   
  9.                 function(args){  
  10.                     fail(args);  
  11.                 },   
  12.                 'plugintest'//java类  
  13.                 'codetest',    //action  
  14.                 [params]    //params  
  15.     );  
  16. };  
  17. PhoneGap.addConstructor(function() {  
  18.     PhoneGap.addPlugin('testAndroid01API'new testAndroid01API());   
  19. });  
  20.      
  21.   
  22. if(!window.plugins) {  
  23.     window.plugins = {};  
  24. }  
  25. if (!window.plugins.testAndroid01API) {  
  26.     window.plugins.testAndroid01API = new testAndroid01API();  
  27. }  
[java]  view plain copy
  1.    
[java]  view plain copy
  1. 4,最后在你需要触发的地方加上:  
[java]  view plain copy
  1. window.plugins.testAndroid01API.test(null,function(r){},function(e){});  
[java]  view plain copy
  1. 这样就可以调用android的Activiy类了,  
[java]  view plain copy
  1. 同理.如果你的在android端把数据传给phonegap端,流程大概与上面的步骤想似:  
[java]  view plain copy
  1. 1,2步一样,第3步是:  
PhoneGap.addConstructor(function() {
  PhoneGap.addPlugin('testAndroid02API', new testAndroid02API());
 
});
//result
var 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();
}
[java]  view plain copy
  1. 4,是在你需要返回结果的地方添加:  
[java]  view plain copy
  1.      var success = function(data){ //当Java方法返回成功时,通过data.key 获得Java中传来的JSONObject数据     
  2.                   //alert("1111111 : " + data.testData1 + '   and 2222222 : ' + data.testData2);     
  3.                   Ext.getCmp('txt_').setValue(data.qrcodeData);   
  4.               };      
  5.                   
  6.      var error = function(e){      
  7.   
  8.                   //Ext.getCmp('txt_').setValue(e);      
  9.               };      
  10.     
  11.      window.plugins.testAndroid02API.test(success, error, null);  
[java]  view plain copy
  1. 这样就可以把数据传递了,当然是你继承了plugin的类中处理方式也是有不同的,例如:  
[java]  view plain copy
  1. <p>public class resultClass extends Plugin{</p><p>    public static final String ACTION = "resultcode";</p><p>    PluginResult result = null;       
  2.     JSONObject jsonObj = new JSONObject();//可以返回给JS的JSON数据   
  3.       
  4.     private SharedPreferences mPref;  
  5.       
  6.     @Override  
  7.     public PluginResult execute(String action, JSONArray data, String callbackId) {  
  8.         mPref = PreferenceManager.getDefaultSharedPreferences(ctx.getContext());  
  9.       if(ACTION.equals(action)){  
  10.   
  11.          String resultCode = mPref.getString("qr_code_result"null);  
  12.          while (resultCode==null || resultCode.length()==0) {//循环获取qr_code_result,直到有值  
  13.             resultCode = mPref.getString("qr_code_result"null);  
  14.      }  
  15.      resultCode = mPref.getString("qr_code_result"null);  
  16.      if(resultCode.length() != 0 ){  
  17.         try {  
  18.            jsonObj.put("qrcodeData", resultCode);  
  19.            mPref.edit().remove("qr_code_result").commit();  
  20.         } catch (JSONException e) {  
  21.            e.printStackTrace();  
  22.         }        
  23.         System.out.println("有值!");  
  24.         result = new PluginResult(PluginResult.Status.OK, jsonObj);     
  25.              //返回成功时,将Java代码处理过的JSON数据返回给JS   
  26.      }else{  
  27.         System.out.println("无值!");  
  28.         result = null;  
  29.      }  
  30.      
  31.         }  
  32.         return result;  
  33.     }  
  34.       
  35. }</p>完!  
在使用Python来安装geopandas包时,由于geopandas依赖于几个其他的Python库(如GDAL, Fiona, Pyproj, Shapely等),因此安装过程可能需要一些额外的步骤。以下是一个基本的安装指南,适用于大多数用户: 使用pip安装 确保Python和pip已安装: 首先,确保你的计算机上已安装了Python和pip。pip是Python的包管理工具,用于安装和管理Python包。 安装依赖库: 由于geopandas依赖于GDAL, Fiona, Pyproj, Shapely等库,你可能需要先安装这些库。通常,你可以通过pip直接安装这些库,但有时候可能需要从其他源下载预编译的二进制包(wheel文件),特别是GDAL和Fiona,因为它们可能包含一些系统级的依赖。 bash pip install GDAL Fiona Pyproj Shapely 注意:在某些系统上,直接使用pip安装GDAL和Fiona可能会遇到问题,因为它们需要编译一些C/C++代码。如果遇到问题,你可以考虑使用conda(一个Python包、依赖和环境管理器)来安装这些库,或者从Unofficial Windows Binaries for Python Extension Packages这样的网站下载预编译的wheel文件。 安装geopandas: 在安装了所有依赖库之后,你可以使用pip来安装geopandas。 bash pip install geopandas 使用conda安装 如果你正在使用conda作为你的Python包管理器,那么安装geopandas和它的依赖可能会更简单一些。 创建一个新的conda环境(可选,但推荐): bash conda create -n geoenv python=3.x anaconda conda activate geoenv 其中3.x是你希望使用的Python版本。 安装geopandas: 使用conda-forge频道来安装geopandas,因为它提供了许多地理空间相关的包。 bash conda install -c conda-forge geopandas 这条命令会自动安装geopandas及其所有依赖。 注意事项 如果你在安装过程中遇到任何问题,比如编译错误或依赖问题,请检查你的Python版本和pip/conda的版本是否是最新的,或者尝试在不同的环境中安装。 某些库(如GDAL)可能需要额外的系统级依赖,如地理空间库(如PROJ和GEOS)。这些依赖可能需要单独安装,具体取决于你的操作系统。 如果你在Windows上遇到问题,并且pip安装失败,尝试从Unofficial Windows Binaries for Python Extension Packages网站下载相应的wheel文件,并使用pip进行安装。 脚本示例 虽然你的问题主要是关于如何安装geopandas,但如果你想要一个Python脚本来重命名文件夹下的文件,在原始名字前面加上字符串"geopandas",以下是一个简单的示例: python import os # 指定文件夹路径 folder_path = 'path/to/your/folder' # 遍历文件夹中的文件 for filename in os.listdir(folder_path): # 构造原始文件路径 old_file_path = os.path.join(folder_path, filename) # 构造新文件名 new_filename = 'geopandas_' + filename # 构造新文件路径 new_file_path = os.path.join(folder_path, new_filename) # 重命名文件 os.rename(old_file_path, new_file_path) print(f'Renamed "{filename}" to "{new_filename}"') 请确保将'path/to/your/folder'替换为你想要重命名文件的实际文件夹路径。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值