第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

Android 混編框架 (2)

標(biāo)簽:
Java

这里我对 WebViewClient 进行了封装,目的在于重写 shouldOverrideUrlLoading 方法,对web端发起请求按 schema 进行区分,区分为 http 请求和我们对原生方法的请求,

public class SpWebViewClient extends WebViewClient

我们创建一个 SpWebViewClient 来继承 WebViewClient,也就是 WebViewClient 进行封装。

@Override
    public boolean shouldOverrideUrlLoading(WebView webView, String url) {
      
        Uri parse = Uri.parse(url);//解析请求的 url
        String scheme = parse.getScheme();//获取 url 的sheme 
         //
        if(SpConfig.SCHEME.equals(scheme)){//判断 scheme 是否为 zidea,如果为 zidea 则进行对原生方法请求
            String host = parse.getHost();// 获取 host 也就是原生的方法名
            String param = parse.getQueryParameter(SpConstant.GET_PARAM);//获取参数
            String callback = parse.getQueryParameter(SpConstant.GET_CALLBACK);//获取参数
            
            try {                //这是一个分发方法,根据 host(方法名称、参数、回到)调用进行分发
                spDispatcher(host,param,callback);
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InstantiationException e) {
                e.printStackTrace();
            }
        }        //这里需要控制,只有注册方法才能被调用,没有注册方法不会被调用
        return false;

    }

这个分发类 spDispatcher 负责根据方法名称、参数和回调将这些参数分发给对应处理的原生方法,这里所有原生方法都是 Action。

private void spDispatcher(String method, String params,String jsmethod) throws IllegalAccessException, InstantiationException{        //方法名称获取到获取对应的类,参见下图
        Class type = SpConfig.ActionMapping.mapping(method);        //我们实例化一个对应的 Action
        SpAction action = (SpAction) type.newInstance();      //因为所有 Action 都实现 onAction 这也就是我们调用的具体原生方法,这部分内容稍后解释,大家只需要有一个印象
        action.onAction(mWebView,params,jsmethod);

    }

这里我们注册方法名称对应一个处理的类,这些类都实现 SpAction ,我们通过方法名称可以对应获取类。

public static class ActionMapping{
        private static HashMap<String,Class> mMap;        //注册动作
        static {
            mMap = new HashMap<>();
            mMap.put("forward",SpActionForward.class);
            mMap.put("startActivity", StartActivityAction.class);
            mMap.put("startConversation", StartConversationAction.class);
            mMap.put("updateTitile", UpdateTitileAction.class);
            mMap.put("print",PrintAction.class);
            mMap.put("request", RequestAction.class);
        }        public static Class mapping(String method){            return mMap.get(method);
        }
    }
  1. 我们所有方法都继承这个抽象类,然后需要实现抽象方法 onAction,接受一个 webview 对象、方法参数和 javascript 回调方法。

public abstract class SpAction {    public static Gson mGson;    public abstract void onAction(WebView webView,String params, String jsmethod);
}



作者:zidea
链接:https://www.jianshu.com/p/e12bd2f81536


點擊查看更多內(nèi)容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學(xué)

大額優(yōu)惠券免費領(lǐng)

立即參與 放棄機會
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消