解决Cordova Plugin回调不触发上级Activity的onActivityResult方法的问题

最近工作中遇到个需求,要求在用cordova进行混合开发的APP中打开文件选择器,选择文件并将路径回传给JS页面。上网找了一通开源的解决方案,有那么几个插件,但有好几个都不能用了。经过试错最后选择了com.ourcodeworld.plugins.filebrowser这个插件,但是即使如此,这个插件仍然需要进行改造才可以用。

这个插件在我使用的SDK 26,Cordova7.0.0的环境下,会出现DialogShowPicker这个Activity无法将数据回传到父级CordovaPlugin,导致父级CordovaPlugin的onActivityResult方法不执行。

改造后直接在DialogShowPickeronActivityResult方法中调用JS回调,这样就可以绕过这个问题。

首先创建一个新Cordova工具类,用于保存JS回调context

import org.apache.cordova.CallbackContext;

public class CordovaUtil {
    private CallbackContext callbackContext;
    private static class CordovaUtilHolder{
        public final static CordovaUtil INSTANCE=new CordovaUtil();
    }

    private CordovaUtil() {

    }
    public static final CordovaUtil getInstance() {
        return CordovaUtilHolder.INSTANCE;
    }

    public CallbackContext getCallbackContext() {
        return callbackContext;
    }

    public void setCallbackContext(CallbackContext callbackContext) {
        this.callbackContext = callbackContext;
    }
}

随后在Filebrowser类(Cordova插件)中的execute方法中,添加

CordovaUtil.getInstance().setCallbackContext(callbackContext);

保存callbackContext

最后,在DialogShowPicker类中的onActivityResult方法的最后,执行setResult方法的位置,添加

CordovaUtil.getInstance().getCallbackContext().success(jsonArray.toString());

测试相关功能,可以发现可以在js回调中取到文件名了

感谢http://www.jufanshare.com/的@大BUG,本文使用了他的部分代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值