Android 平台下Cordova 调用Activity插件开发
首先建立一个包名为package com.JiajiaCy.CallActivity;
package com.JajaCy.CallActivity; import org.apache.cordova.CallbackContext; import org.apache.cordova.CordovaPlugin; import org.apache.cordova.PluginResult; import org.json.JSONArray; import org.json.JSONException; import android.app.Activity; import android.content.Intent; import android.os.Bundle; public class CallActivityPlugin extends CordovaPlugin { public static final String ACTION ="call"; @Override public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { if (action.equals(ACTION)) { try { //下面两句最关键,利用intent启动新的Activity Intent intent = new Intent().setClass(cordova.getActivity(), Class.forName(args.getString(0))); this.cordova.startActivityForResult(this, intent, 1); //下面三句为cordova插件回调页面的逻辑代码 PluginResult mPlugin = new PluginResult(PluginResult.Status.NO_RESULT); mPlugin.setKeepCallback(true); callbackContext.sendPluginResult(mPlugin); callbackContext.success("success"); } catch (Exception e) { e.printStackTrace(); return false; } } return true; } /** * onActivityResult为第二个Activity执行完后的回调接收方法 * */ @Override public void onActivityResult(int requestCode, int resultCode, Intent intent){ switch (resultCode) { //resultCode为回传的标记,我在第二个Activity中回传的是RESULT_OK case Activity.RESULT_OK: Bundle b=intent.getExtras(); //data为第二个Activity中回传的Intent String str=b.getString("change01");//str即为回传的值 break; default: break; } } }
在res\xml\config.xml中添加:
<feature name="CallActivity"> <param name="android-package" value="com.JajaCy.CallActivity.CallActivityPlugin"/> </feature>
在assets\www\plugins\com.JajaCy.CallActivity目录下建一个CallActivity.js
cordova.define('com.JajaCy.CallActivity.CallActivityPlugin', function(require, exports, module) { var exec=require('cordova/exec'); module.exports={ /** param:data */ activityPlugin:function(data){ /** 一共五个参数 第一个 :成功会掉 第二个 :失败回调 第三个 :将要调用的类的配置名字(在config.xml中配置 稍后在下面会讲解) 第四个 :调用的方法名(一个类里可能有多个方法 靠这个参数区分) 第五个 :传递的参数 以json的格式 */ exec(nativePluginResultHandler,nativePluginErrorHandler,"CallActivity","call",[data]) } } }); /** 成功时调用的方法 */ function nativePluginResultHandler (result) { alert("SUCCESS: \r\n"+result ); } /** 失败时调用的方法 */ function nativePluginErrorHandler (error) { alert("ERROR: \r\n"+error ); }
在cordova_plugins.js文件中进行如下配置:
{ "file": "plugins/com.JajaCy.CallActivity/CallActivity.js", "id": "com.JajaCy.CallActivity.CallActivityPlugin", "clobbers": [ "window.call" ] }
module.exports.metadata = // TOP OF METADATA { "com.JajaCy.CallActivity":"0.0.1" }
调用的时候使用:
window.call.activityPlugin("com.JajaCy.CallActivity.DownloadActivity;");
最后需要在AndroidManifest.xml中进行配置Activity:
<activity android:name="DownloadActivity"></activity>
这样就可以完成Cordova调用Activity