当前位置:  开发笔记 > 前端 > 正文

在Android中混合使用cordova和本机活动

如何解决《在Android中混合使用cordova和本机活动》经验,为你挑选了1个好方法。

我希望我的大部分应用程序(列表项,存储,登录,屏幕等等)都在cordova中处理,因为在本机工作流程中这样做很痛苦.

但是我有一个特定的活动(我已经创建了)无法用cordova完成(至少不够好和足够快).我该如何创建这个应用程序?

我是否应该创建一个仅加载这两项活动的cordova插件?

我应该通过cli生成cordova应用程序还是应该将cordova嵌入到一个活动中?

如果有更多的材料,我很乐意听到它.

提前致谢.



1> jcesarmobile..:

这取决于您创建的活动.

如果您的主要活动是Cordova屏幕,并且它将全屏显示,并且Cordova部分上的某些操作将针对特定任务启动您的本机活动,那么您应该使用插件,使用意图启动您的活动当你完成它时,你关闭它并返回Cordova活动,返回一个值或不.

如果您想将Cordova视图与本机视图混合在一起,其中没有一个是全屏的,那么您应该在本机项目中嵌入Cordova.

如果您的活动将成为您的主要活动,那么嵌入Cordova是您唯一的选择.

正如您所要求的示例,并且您认为真正的插件不是一个好例子,我将简化插件创建指南

插件需要一个如下所示的plugin.xml文件:



    pluginName
    description of the plugin
    License of the plugin
    
        
    
    
        
            
                
            
        

        
    

通过查看它,你可以看到你还需要一个带有pluginName.js文件的www文件夹,以及一个带有pluginName.java文件的src/android文件夹.

pluginName.js应该是这样的:

function showNativeView() {
    cordova.exec(successCallback, errorCallback, "PluginName", "showNativeView", [arguments]);
}

第一个参数是插件完成执行时调用的successCallback函数.第二个参数是如果插件有任何问题则调用的errorCallback函数第三个参数是你要调用的java类的名称,它必须匹配plugin.xml上的那个.第四个参数是要在java类中调用的动作第五个是数组或参数,如果你想发送任何数组.要执行它,只需按一下按钮即可调用showNativeView().提醒,这是过度简化,正确的方法应该是为插件创建一个命名空间并为其添加不同的功能,但我想保持简单.

最后,PluginName.java应该是这样的:

    @Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
        if ("showNativeView".equals(action)) {
            Intent yourIntent = new Intent(this.cordova.getActivity().getBaseContext(), YourActivityToLaunch.class);
cordova.getActivity().startActivity(yourIntent);
            callbackContext.success();
            return true;
        }
        return false;  // Returning false results in a "MethodNotFound" error.
    }

这会启动一个简单的意图,如果你的活动返回了你必须使用的内容,那么它就不会返回任何内容

this.cordova.startActivityForResult(this, yourIntent, REQUEST_CODE);

并添加

@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    String result = intent.getStringExtra("WHATEVER_THE_INTENT_RETURNS"),
    this.callbackContext.success(result);
}

您在此处调用此成功,而不是在启动intent后立即执行此操作,并返回活动返回的值.您还应该检查REQUEST_CODE以匹配您用于启动意图的活动,活动的结果等.

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有