• 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;
            }
        }
    }

    在resxmlconfig.xml中添加:

    <feature name="CallActivity">
            <param name="android-package" value="com.JajaCy.CallActivity.CallActivityPlugin"/>
        </feature>

    在assetswwwpluginscom.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: 
    "+result );   
    } 
    /**
    失败时调用的方法
    */  
    function nativePluginErrorHandler (error) {   
       alert("ERROR: 
    "+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

  • 相关阅读:
    Centos/Docker/Nginx/Node/Jenkins 操作
    MyBatis 流式查询
    127.0.0.1
    Spring中的@Bean注解
    工厂模式
    webservice
    vs每次拉下一个控件都必选设置为绝对位置才可以移动,怎样解决啊
    ASP.NET AJAX 概述
    AJAX介绍
    时间控件
  • 原文地址:https://www.cnblogs.com/ToFlying/p/4151016.html
Copyright © 2020-2023  润新知