Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2257500
  • 博文数量: 862
  • 博客积分: 14125
  • 博客等级: 上将
  • 技术积分: 10598
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-27 16:53
个人简介

https://github.com/zytc2009/BigTeam_learning

文章分类

全部博文(862)

文章存档

2019年(3)

2018年(1)

2017年(10)

2015年(3)

2014年(8)

2013年(3)

2012年(69)

2011年(103)

2010年(357)

2009年(283)

2008年(22)

分类: 系统运维

2012-07-24 17:03:19

转自:http://topmanopensource.iteye.com/blog/1577717

          在项目采用Native+Web方式开发,Android团队开发一个模块的代码,WebApp phonegap开发几个模块,需要将Android中的模块潜入到Phonegap开发的几个模块中。需要通过Phonegap调用Android 的Activity。

demo如下:

 

Phonegap插件类:

Java代码  收藏代码
  1. package com.easyway.etrip.plugins;  
  2.   
  3. import org.json.JSONArray;  
  4.   
  5. import android.app.Activity;  
  6. import android.content.Intent;  
  7. import android.os.Handler;  
  8. import android.os.Message;  
  9. import android.util.Log;  
  10.   
  11. import com.phonegap.api.Plugin;  
  12. import com.phonegap.api.PluginResult;  
  13. /** 
  14.  * Phonegap 调用Android Activity的插件 
  15.  *  
  16.  * @Title:  
  17.  * @Description: 实现TODO 
  18.  * @Copyright:Copyright (c) 2011 
  19.  * @Company:易程科技股份有限公司 
  20.  * @Date:2012-7-5 
  21.  * @author  longgangbai 
  22.  * @version 1.0 
  23.  */  
  24. public class AndroidActivityPlugin  extends Plugin{  
  25.        
  26.     private Object synObj = new Object();  
  27.     @Override  
  28.     public PluginResult execute(String action, JSONArray data, String callbackID) {  
  29.         // TODO Auto-generated method stub  
  30.         if(action.equals("startActivity")){  
  31.             PluginResult result = null;  
  32.               
  33.             try {         
  34.                 PluginResult.Status status = PluginResult.Status.OK;  
  35.                 if(action.equals("startActivity")){   
  36.                     Log.e("test""test plugin js -> java~~~~"+data.getString(0));   
  37.                     Log.e("test""test plugin js -> java~~~~");                   
  38.                     result = new PluginResult(status, data.getString(0));     
  39.                     Message msg=new Message();  
  40.                     msg.what=1;  
  41.                     Log.e("参数信息:", data.toString());  
  42.                     msg.obj=data.getString(0);  
  43.                     handler.sendMessage(msg);  
  44.                     sleep();  
  45.                 }  
  46.             } catch (Exception e) {  
  47.             }  
  48.             return result;  
  49.         }else {  
  50.             return new PluginResult(PluginResult.Status.INVALID_ACTION);  
  51.         }  
  52.       
  53.     }  
  54.     private Handler handler = new Handler() {  
  55.         public void handleMessage(Message msg) {  
  56.             if (msg == null) {  
  57.                 return;  
  58.             }  
  59.             switch (msg.what) {  
  60.             case 1:  
  61.                 String className=msg.obj.toString();  
  62.                 try {  
  63.                     Class activityClass = Class.forName(className);  
  64.                     Intent intent = new Intent(ctx.getBaseContext(), activityClass);//你想去的activity(exp:Temp)  
  65.                     ctx.startActivityForResult(AndroidActivityPlugin.this, intent, 1);  
  66.                 } catch (ClassNotFoundException e) {  
  67.                     Log.e("Why""错误原因:"+className);  
  68.                     e.printStackTrace();  
  69.                 }  
  70.                 break;  
  71.             }  
  72.         };  
  73.     };  
  74.       
  75.     @Override  
  76.     public void onActivityResult(int requestCode, int resultCode, Intent intent) {  
  77.         // TODO Auto-generated method stub    
  78.         if(requestCode==1){  
  79.             if(resultCode == Activity.RESULT_CANCELED){  
  80.                 //返回时调用  
  81.                 Log.e("test""result plugin -> java~~~~");   
  82.                 Log.e("test""result plugin -> java~~~~");   
  83.                 weakup();  
  84.             }  
  85.         }else{  
  86.             super.onActivityResult(requestCode, resultCode, intent);  
  87.         }  
  88.     }  
  89.       
  90.       
  91.     private void sleep()  
  92.     {  
  93.         try  
  94.         {  
  95.             synchronized(synObj)  
  96.             {  
  97.                 synObj.wait();  
  98.             }  
  99.         }  
  100.         catch (InterruptedException e)  
  101.         {  
  102.             e.printStackTrace();  
  103.         }  
  104.     }  
  105.       
  106.     private void weakup()  
  107.     {  
  108.         synchronized(synObj)  
  109.         {  
  110.             synObj.notify();  
  111.         }  
  112.     }  
  113.       
  114. }  

 

 

 

phonegap启动类:

Java代码  收藏代码
  1. package com.easyway.etrip;  
  2.   
  3. import android.os.Bundle;  
  4.   
  5. import com.phonegap.DroidGap;  
  6. /** 
  7.  * phonegap启动类 
  8.  *  
  9.  * @Title:  
  10.  * @Description: 实现TODO 
  11.  * @Copyright:Copyright (c) 2011 
  12.  * @Company:易程科技股份有限公司 
  13.  * @Date:2012-7-5 
  14.  * @author  longgangbai 
  15.  * @version 1.0 
  16.  */  
  17. public class PhonegapAndroidActivityActivity extends DroidGap  {  
  18.     /** Called when the activity is first created. */  
  19.     @Override  
  20.     public void onCreate(Bundle savedInstanceState) {  
  21.           super.onCreate(savedInstanceState);  
  22.           super.loadUrl("file:///android_asset/www/index.html");  
  23.     }  
  24. }  

 

Android的Activity类:

Java代码  收藏代码
  1. package com.easyway.etrip;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. /** 
  6.  *  
  7.  *  
  8.  * @Title:  
  9.  * @Description: 实现TODO 
  10.  * @Copyright:Copyright (c) 2011 
  11.  * @Company:易程科技股份有限公司 
  12.  * @Date:2012-7-5 
  13.  * @author  longgangbai 
  14.  * @version 1.0 
  15.  */  
  16. public class ThirdAndroidActivity extends Activity {  
  17.     /** Called when the activity is first created. */  
  18.     @Override  
  19.     public void onCreate(Bundle savedInstanceState) {  
  20.         super.onCreate(savedInstanceState);  
  21.         super.setContentView(R.layout.main);  
  22.     }  
  23. }  

 

 

 

phonegap的插件配置类phonegap.xml:

Xml代码  收藏代码
  1. <plugin name="AndroidActivity" value="com.easyway.etrip.plugins.AndroidActivityPlugin"/>  

 

androidActivity.js

Js代码  收藏代码
  1. var AndroidActivity=function(){};   
  2. AndroidActivity.prototype.startActivity = function(success, fail,parmas)  
  3. {   
  4.     return PhoneGap.exec(   
  5.             function(args){ success(args); },   
  6.             function(args){ fail(args); },   
  7.             'AndroidActivity'//java类   
  8.             'startActivity'//action   
  9.             [parmas] //params   
  10.              );   
  11. };  
  12. PhoneGap.addConstructor(function() {  
  13.     PhoneGap.addPlugin('androidActivity'new AndroidActivity());  
  14. });  

 

 

调用的测试类:

 

Html代码  收藏代码
  1. >  
  2. <html>  
  3.   <head>  
  4.     <meta name="viewport" content="width=320; user-scalable=no" />  
  5.     <meta http-equiv="Content-type" content="text/html; charset=utf-8">  
  6.     <title>Minimal AppLaud Apptitle>  
  7.   
  8.       <script type="text/javascript" charset="utf-8" src="phonegap-1.4.1.js">script>  
  9.       <script type="text/javascript" charset="utf-8" src="androidActivity.js">script>  
  10.       <script type="text/javascript" charset="utf-8">  
  11.     function openAndroidActivity(){    
  12.         window.plugins.androidActivity.startActivity(  
  13.                 function(r){//alert(r);  
  14.                     },  
  15.                 function(e){//alert(e);  
  16.                 },  
  17.                 "com.easyway.etrip.ThirdAndroidActivity"  
  18.             );  
  19.     }  
  20. script>  
  21. head>  
  22. <body>  
  23. <h1>Hello Worldh1>  
  24.      <input type="button" value="打开Android Activity" onclick="javascript:openAndroidActivity();">  
  25. body>  
  26. html>  

 


阅读(1608) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~