栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

自动化编辑器 插件开发

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

自动化编辑器 插件开发

自动化编辑器作为手机平台的低代码rpa工具提供了丰富的条件和动作来编辑自动化任务基本上可以做到不用写代码就可以完成一个功能完善的自动化任务,不过遇到一些特殊的需求自动化编辑器内置的动作可能不能实现我们想要的功能,这时候就需要自定义动作即开发插件

下面的演示的demo已经重新封装 可以在github和gitee上下载

开发自动化编辑器的插件还是比较简单的

首先新建一个Android 项目

这里要注意Package Name 一定要用cn.autoeditor.pluginaction开头,这个是自动化编辑器搜索插件的硬性要求

然后 Launcher Activity 实现如下接口 就可以了

public interface IPluginAction {

    //返回插件支持的动作列表
    public List actionList() ;

    //返回指定动作需要的参数列表
    public List actionArgs(String actionName) ;

    //指定动作参数对应的可选列表,如果可选列表为空将对应变量列表作为输入参数
    public Map> argsOptions(String actionName) ;

    //返回指定动作的返回结果列表
    public List results(String actionName) ;

    //初始化android context
    public void initContext(String actionName, Context context) ;

    
    public Map onAction(String actionName, Map args, Bitmap bitmap) ;


}

下面详细介绍一下上面的方法

public List actionList() ;

返回此插件支持的动作列表,我们这里可以返回三个测试动作

    @Override
    public List actionList() {
        return new ArrayList(){
            {
                add("测试动作1");
                add("测试动作2");
                add("测试动作3");
            }
        };
    }

 代码效果

public List actionArgs(String actionName)

返回指定动作需要的参数列表,actionName 会将上面actionList返回的三个动作名称依次传入

    private List test1ActionArgs(){

        return new ArrayList(){
            {
                add("动作1参数1") ;
                add("动作1参数2") ;
            }
        } ;
    }

    private List test2ActionArgs(){

        return new ArrayList(){
            {
                add("动作2参数1") ;
            }
        } ;
    }

    //不需要参数可以返回null
    private List test3ActionArgs(){
        return null ;
    }

    @Override
    public List actionArgs(String actionName) {
        switch (actionName){
            case "测试动作1":
                return test1ActionArgs() ;
            case "测试动作2" :
                return test2ActionArgs() ;
            case "测试动作3":
                return test3ActionArgs() ;
            default:
                break;
        }
        return  null ;
    }

代码效果

 

  

public Map> argsOptions(String actionName)

返回指定动作需要指定自定义输入内容的参数列表及其对应的自定义内容,此列表不包含的参数会选择变量作为输入内容,此列表包含的参数只能选择对应的列表的内容

    public List test1ActionsArg1Options(){
        return new ArrayList(){
            {

                add("动作1参数1只能选择这些内容--1") ;
                add("动作1参数1只能选择这些内容--2") ;
                add("动作1参数1只能选择这些内容--3") ;
            }  
        };
    }
    
    private Map> test1ActionArgsOptions(){
        Map> options= new HashMap<>() ;
        
        options.put("动作1参数1",test1ActionsArg1Options()) ; //此map只包含"动作1参数1",其它参数的输入内容选择变量,此参数选择列表对应的内容
        return options ;
    }
    
    @Override
    public Map> argsOptions(String actionName) {
        switch (actionName){
            case "测试动作1":
                return test1ActionArgsOptions() ;
            default: 
                break ;
        }
        //返回null代表所有参数都通过变量作为输入
        return null;
    }
代码效果,只展示参数1,其它全部需要选择变量




public List results(String actionName) 
返回指定动作需要返回的结果,返回的结果可以通过自动化编辑器保存在指定的变量中
 
    private List test1ActionResults(){
        return new ArrayList(){
            {
                add("动作1返回结果") ;
            }
        } ;
    }


    private List test2ActionResults(){
        //返回null代表此动作无返回结果
        return null ;
    }

    private List test3ActionResults(){
        return new ArrayList(){
            {
                add("动作3返回结果1") ;
                add("动作3返回结果2") ;
            }
        } ;
    }

    @Override
    public List results(String actionName) {
        switch (actionName){
            case "测试动作1":
                return test1ActionResults() ;
            case "测试动作2" :
                return test2ActionResults() ;
            case "测试动作3":
                return test3ActionResults() ;
            default:
                break;
        }
        return  null ;
    }
此代码效果参照上方参数效果图


public void initContext(String actionName, Context context) ;

初始化Android Context,这里注意因为是插件,不能使用我们自己Activity的Context,而且在自动化编辑器加载插件时 Activity的onCreate和其它生命周期是不会被调用的,所以如果想使用Context只能使用这里传进来的Context,这个方法是通过ui线程调用的,这里我们保存Context,并且创建一个Handler,注意这里会多次调用(包含的动作列表数量),这里我只创建一个Handler,通过Handler显示一个Toast

    private Handler handler ;
    @Override
    public void initContext(String actionName, Context context) {
        if(handler == null){
            handler = new Handler(new Handler.Callback() {
                @Override
                public boolean handleMessage(@NonNull Message msg) {
                    Toast.makeText(context, msg.obj.toString(),Toast.LENGTH_SHORT).show();
                    return false;
                }
            }) ;
        }
    }
public Map onAction(String actionName, Map args, Bitmap bitmap) ;

关键方法来了,这个就是实际运行中执行动作是调用的方法,这里演示只通过toast显示一下

    private Map test1ActionReturn(){
        Map result = new HashMap<>() ;
        result.put("动作1返回结果", "123") ; //这里测试返回固定值
        return result ;
    }
    private Map test2ActionReturn(){
        return  null ;//因为测试动作2不需要返回结果这里直接返回null
    }

    int test3Result1 =1;
    int test3Result2 = 99 ;    
    private Map test3ActionReturn(){
        Map result = new HashMap<>() ;
        result.put("动作3返回结果1", String.valueOf(test3Result1++)) ;
        result.put("动作3返回结果2", String.valueOf(test3Result2--)) ;
        return result ;
    }
    @Override
    public Map onAction(String actionName, Map args, Bitmap bitmap) {
        Message message = new Message();
        String toastMsg = actionName ;
        if(args != null){
            toastMsg += args.toString();
        }
        message.obj = toastMsg ;
        handler.sendMessage(message) ;

        switch (actionName){
            case "测试动作1":
                return test1ActionReturn() ;
            case "测试动作2" :
                return test2ActionReturn() ;
            case "测试动作3":
                return test3ActionReturn() ;
            default:
                break;
        }
        return null;
    }

测试动作1运行效果及回放

 测试动作3运行效果及回放

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/681476.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号