它山之石可以攻玉

键盘上的生活
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Cordova调用Activity

Posted on 2013-12-10 14:52  陈达辉  阅读(20355)  评论(1编辑  收藏  举报

首先需要编写一个CallActivityPlugin插件,专门调用Activity

 

 

Java代码  收藏代码
  1. package com.example.plugin;  
  2.   
  3. import org.apache.cordova.api.CallbackContext;  
  4. import org.apache.cordova.api.CordovaPlugin;  
  5. import org.apache.cordova.api.PluginResult;  
  6. import org.json.JSONArray;  
  7. import org.json.JSONException;  
  8.   
  9. import android.app.Activity;  
  10. import android.content.Intent;  
  11. import android.os.Bundle;  
  12. import android.util.Log;  
  13.   
  14. public class CallActivityPlugin extends CordovaPlugin {  
  15.     public static final String ACTION = "call";  
  16.       
  17.     @Override  
  18.     public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {  
  19.         if (action.equals(ACTION)) {  
  20.             try {    
  21.                 //下面两句最关键,利用intent启动新的Activity  
  22. Intent intent = new Intent().setClass(cordova.getActivity(), Class.forName(args.getString(0)));  
  23.                 this.cordova.startActivityForResult(this, intent, 1);  
  24.                 //下面三句为cordova插件回调页面的逻辑代码  
  25.                 PluginResult mPlugin = new PluginResult(PluginResult.Status.NO_RESULT);  
  26.                 mPlugin.setKeepCallback(true);  
  27.   
  28.                 callbackContext.sendPluginResult(mPlugin);  
  29.                 callbackContext.success("success");   
  30.                   
  31.             } catch (Exception e) {    
  32.                 e.printStackTrace();  
  33.                 return false;  
  34.             }  
  35.         }  
  36.   
  37.         return true;  
  38.     }  
  39.     //onActivityResult为第二个Activity执行完后的回调接收方法  
  40.     @Override  
  41.     public void onActivityResult(int requestCode, int resultCode, Intent intent){    
  42.         switch (resultCode) { //resultCode为回传的标记,我在第二个Activity中回传的是RESULT_OK  
  43.             case Activity.RESULT_OK:  
  44.                 Bundle b=intent.getExtras();  //data为第二个Activity中回传的Intent  
  45.                 String str=b.getString("change01");//str即为回传的值  
  46.                 break;  
  47.             default:  
  48.                break;  
  49.         }  
  50.     }   
  51. }  

 

 然后配置CallActivityPlugin插件res/xml/config.xml

Xml代码  收藏代码
  1. <plugin name="CallActivityPlugin" value="com.example.plugin.CallActivityPlugin"/>  

 

接着利用js调用插件(callActivity.js)

 

Js代码  收藏代码
  1. window.callActivityPlugin = function(str,callback) {  
  2.     cordova.exec(callback, pluginFailed, "CallActivityPlugin""call", [ str ]);  
  3. };  
  4.   
  5. var pluginFailed = function(message) {  
  6.     alert("failed>>" + message);  
  7. }  
  8.   
  9. $(function() {  
  10.     init();  
  11. });  
  12.   
  13. var init = function() {  
  14.     console.log("phonegap init!!");  
  15.     document.addEventListener("deviceready", onDeviceReady, true);  
  16. }  
  17.   
  18. var onDeviceReady = function() {  
  19.       
  20.     console.log("deviceready event fired");  
  21.   
  22.     window.callActivityPlugin("com.example.activity.MyActivity" , function(echoValue) {  
  23.         console.log("callActivityPlugin echo>>");  
  24.     });  
  25. };  

 

最后html页面加载(相对简单)

Html代码  收藏代码
  1. <!DOCTYPE html>  
  2. <html>  
  3.   <head>  
  4.     <title>Device Properties Example</title>  
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
  6.     <script type="text/javascript" charset="utf-8" src="../js/jquery-1.8.3.js"></script>  
  7.     <script type="text/javascript" charset="utf-8" src="../js/cordova-2.3.0.js"></script>  
  8.     <script type="text/javascript" charset="UTF-8" src="../js/callActivity.js"></script>  
  9.   </head>  
  10.   <body>  
  11.     <p id="callActivityPlugin">callActivityPlugin</p>  
  12.     <a href="../index.html">返回</a>  
  13.   </body>  
  14. </html>  

 

 

新的Activity代码(相对简单)

Java代码  收藏代码
  1. package com.example.activity;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.Context;  
  5. import android.content.Intent;  
  6. import android.net.Uri;  
  7. import android.os.Bundle;  
  8. import android.util.Log;  
  9. import android.view.View;  
  10. import android.view.View.OnClickListener;  
  11. import android.widget.Button;  
  12.   
  13. import com.example.ask.R;  
  14.   
  15. public class MyActivity extends Activity {  
  16.     private Button btn;  
  17.   
  18.     private int flag = 0;  
  19.   
  20.     private Intent intentNew = null;  
  21.   
  22.     private Context context = this;  
  23.   
  24.     @Override  
  25.     public void onCreate(Bundle savedInstanceState) {  
  26.   
  27.         super.onCreate(savedInstanceState);  
  28.   
  29.         setContentView(R.layout.my_activity_main);  
  30.   
  31.         intentNew = this.getIntent();  
  32.   
  33.         btn = (Button) findViewById(R.id.button1);  
  34.   
  35.         btn.setOnClickListener(new OnClickListener() {  
  36.   
  37.             public void onClick(View v) {  
  38.                 Intent mIntent = new Intent();    
  39.                 mIntent.putExtra("change01""1000");    
  40.                 mIntent.putExtra("change02""2000");    
  41.                 // 设置结果,并进行传送    
  42.                 setResult(RESULT_OK, mIntent);  
  43.                 finish();  
  44.             }  
  45.         });  
  46.   
  47.     }  
  48. }