cordova 插件想要访问Android原生的Activity


操作如下 



步骤1.在生成插件的文件夹中找到自动生成的 plugin.xml文件 配置此文件


Cordova插件调用Android原生Activity_第1张图片



Cordova插件调用Android原生Activity_第2张图片


Cordova插件调用Android原生Activity_第3张图片



步骤2.插件文件夹 src/android/ 文件夹下准备拷贝资源


Cordova插件调用Android原生Activity_第4张图片


Cordova插件调用Android原生Activity_第5张图片



步骤3.提交插件到cordova 项目



步骤4.提交成功后 在Cordova项目中platforms/android/ 找到对应的代码


1.生成的相应android 清单文件

Cordova插件调用Android原生Activity_第6张图片


2.对应的java类

Cordova插件调用Android原生Activity_第7张图片


3.插件类中操作


@Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
        if ("alipay".equals(action)) {
            Intent intent=new Intent();
            intent.setAction("XXXXXXXXXXXXXXXXXXX");
            cordova.getActivity().startActivity(intent);
            return true;//返回true
        }else if("weixinpay".equals(action)){
            Intent intent=new Intent();
            intent.setAction("XXXXXXXXXXXXXXXXXXXXXXXXX");
            cordova.getActivity().startActivity(intent);
            return true;//返回true
        }
        return false;
    }



至此就完成了将原生android代码打包成Cordova插件 并能在Cordova插件中调用android原生代码


注意1.android原生代码 直接拷贝的话 到Corodva插件中 是找不到R.layout.XX 或是R.id.XX 的


解决方法 

 

提供工具类 MResource


public class MResource {


    public static int getIdByName(Context context, String className, String resName) {
        String packageName = context.getPackageName();
        int id = 0;
        try {
            Class r = Class.forName(packageName + ".R");
            Class[] classes = r.getClasses();
            Class desireClass = null;
            for (Class cls : classes) {
                if (cls.getName().split("\\$")[1].equals(className)) {
                    desireClass = cls;
                    break;
                }
            }
            if (desireClass != null) {
                id = desireClass.getField(resName).getInt(desireClass);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return id;
    }


}



然后Android原生Activity 中


@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(MResource.getIdByName(this, "layout", "XXXXX"));
        initView();
    }



public void initView(){
paytextview= (TextView) findViewById(MResource.getIdByName(this, "id","XXXX"));
paytextview.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                
            }
        });
 }


这样就解决了导入后R.layout.XX 和R.id.XX 找不到问题了




注意2 插件中跳转Android原生actiivty是 不能直接跳转 隐式跳转


Intent intent=new Intent();
intent.setAction("XXXXXXXXXXXXXXXXXXX");
cordova.getActivity().startActivity(intent);
return true;//返回true



相应的原生Activity 注册时



           
               
               
           

 



希望对你有所帮助!!!!

更多相关文章

  1. Android实现OCR扫描识别数字图片之图片扫描识别
  2. Android 选择图片、上传图片之PictureSelector
  3. Android Gradle使用详解(三) 之 Android Gradle插件配置详解
  4. 详谈 Android 高大上的图片加载框架 Glide
  5. Android中图片实现按钮点击效果
  6. Android 1比1高仿微信图片选择器(新)
  7. android实现图片平移、旋转、缩放
  8. android 显示gif图片

随机推荐

  1. Android(安卓)App 如何动态加载类
  2. 阅读《Android(安卓)从入门到精通》(1)——
  3. Android全屏与非全屏问题
  4. Android(安卓)设定横屏,禁止屏幕旋转,Activ
  5. Android类库介绍
  6. Android(安卓)Studio 第六十五期 - Andro
  7. Android7.0 MTK方案 静默安装和卸载
  8. Android开发之Android的原生库
  9. Android(安卓)应用安装设置
  10. Android(安卓)人脸识别