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

posted @ 2014-12-08 14:21  Follow-your-heart  阅读(927)  评论(0编辑  收藏  举报