android 7.0 浏览器 拦截适配 shouldOverrideUrlLoading

news/2025/2/26 5:10:45


浏览器使用第三方开源github框架:

//浏览器 https://github.com/Justson/AgentWeb
compile 'com.just.agentweb:agentweb:1.2.6'

7.0路径拦截存在适配问题shouldOverrideUrlLoading会分别访问不同参数的同一方法:

7.0以上系统访问
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request)


7.0以下系统访问
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) 


具体例如下:
public class MessageFragment extends Fragment {
    View view;
    @Bind(R.id.setting)
    TextView setting;
    @Bind(R.id.userInfo)
    TextView userInfo;
    @Bind(R.id.rootPr)
    RelativeLayout rootPr;
    private AgentWeb mAgentWeb;
    public String url;

    private boolean isGoToLogin = false;
    private long currentMillTime = 0;

    public static MessageFragment newInstance() {
        MessageFragment mFragment = new MessageFragment();
        Bundle bundle = new Bundle();
        mFragment.setArguments(bundle);
        return mFragment;
    }

    private String addSessionKey(String url) {
        if (StringUtil.isEmpty(url)) return url;
        if (url.indexOf("?") != -1) {
            return url.replaceFirst("\\?","?sessionKey=" + SettingPrefUtil.getZHXFSession(getActivity()) + "&");
        } else {
            return url += "?sessionKey=" + SettingPrefUtil.getZHXFSession(getActivity());
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.fragment_message, null);
        ButterKnife.bind(this, view);
        url = MyConfigZHXF.Asset_EX_URL + "index_msg.html";
        url = addSessionKey(url);
        mAgentWeb = AgentWeb.with(getActivity())//传入Activity
                .setAgentWebParent(rootPr, new RelativeLayout.LayoutParams(-1, -1))//传入AgentWeb 的父控件 ,如果父控件为 RelativeLayout , 那么第二参数需要传入 RelativeLayout.LayoutParams
                .useDefaultIndicator()// 使用默认进度条
                .defaultProgressBarColor() // 使用默认进度条颜色
                //.setReceivedTitleCallback(this) //设置 Web 页面的 title 回调
                .setWebViewClient(mWebViewClient)
                .createAgentWeb()
                .ready()
                .go(url);
        //zhxfAddHeaders(url); //智慧信访sessionKey 添加
        return view;
    }

    private WebViewClient mWebViewClient=new WebViewClient(){
        @TargetApi(Build.VERSION_CODES.LOLLIPOP)
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            String url = request.getUrl().toString();
            if (StringUtil.isEmpty(url)) return true;
            //是否使用第三方浏览器 返回true不调用 返回false调用
            if (dealWithSpecialUrl(url)) return true;
            //return super.shouldOverrideUrlLoading(view,request);
            return true;
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (dealWithSpecialUrl(url)) return true;
            return true;
            //return super.shouldOverrideUrlLoading(view, url);
        }

        /*@Override
        public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
            String result = "<html>\n" +
                    "<title>点击访问</title>\n" +
                    "<body>\n" +
                    "<a href=\"www.lvche.com.cn\">XX科技</a>,一个为技术研发而生的科技型研发公司\n" +
                    "</body>\n" +
                    "<html>";
            WebResourceResponse response = new WebResourceResponse("text/html",
                    "utf-8",
                    new ByteArrayInputStream(result.getBytes()));
            return response;
        }*/
    };

    private boolean dealWithSpecialUrl(String url) {
        if (System.currentTimeMillis() - currentMillTime < 1000) {
            currentMillTime = System.currentTimeMillis();
            return true;
        }
        if (url.indexOf("index_login") != -1) {
            LoginZHXFActivity.startActivity(getActivity());
            isGoToLogin = true;
            return true;
        }
        if (url.indexOf("index_set") != -1) {
            SettingActivity.startActivity(getActivity());
            return true;
        }
        if (!StringUtil.isEmpty(url)) {
            BrowserLvcheActivity.startActivity(getActivity(), url);
            return true;
        }
        return false;
    }

    private void zhxfAddHeaders(String url) {
        //兑吧添加请求头
        Map<String,String> map=new HashMap<>();
        map.put("sessionKey", SettingPrefUtil.getZHXFSession(getActivity()));
        mAgentWeb.getWebCreator().get().loadUrl(url,map);
    }

    public void reloadUrl() {
        if (mAgentWeb != null) {
            url = MyConfigZHXF.Asset_EX_URL + "index_msg.html";
            url = addSessionKey(url);
            if (mAgentWeb != null) mAgentWeb.getWebCreator().get().loadUrl(url);
        }
    }

    @Override
    public void onResume() {
        super.onResume();
        if (mAgentWeb != null && isGoToLogin) {
            reloadUrl();
            isGoToLogin = false;
        }
    }

    @Override
    public void onStart() {
        super.onStart();
        /*setting.setOnClickListener(new NoDoubleClickListener() {
            @Override
            public void onNoDoubleClick(View v) {
                SettingActivity.startActivity(getActivity());
            }
        });
        userInfo.setOnClickListener(new NoDoubleClickListener() {
            @Override
            public void onNoDoubleClick(View v) {
                UserInfoActivity.startActivity(getActivity());
            }
        });*/
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        ButterKnife.unbind(this);
    }
}



http://www.niftyadmin.cn/n/4582747.html

相关文章

GreenDao 兼容升级,保留旧数据的---全方面解决方案

作者&#xff1a;林冠宏 / 指尖下的幽灵 掘金&#xff1a;https://juejin.im/user/587f0dfe128fe100570ce2d8 博客&#xff1a;http://www.cnblogs.com/linguanh/ GitHub &#xff1a; https://github.com/af913337456/ 腾讯云专栏&#xff1a; https://cloud.tencent.com/deve…

android studio 混淆使用,测试百分百可用

转载请申明 http://blog.csdn.net/wuqilianga/article/details/77533599 在主app中开启混淆&#xff0c;一般情况下release开启就行了&#xff0c;这个压缩和混淆开启影响速度 buildTypes {release {signingConfig signingConfigs.releaseminifyEnabled truezipAlignEnabled t…

Ubuntu下调整时区时间

Ubuntu下调整时区时间 学习了&#xff1a;http://blog.csdn.net/jintiaozhuang/article/details/38583031 进行了tzselect错误的修复 学习了&#xff1a;https://www.cnblogs.com/php-linux/p/6018625.html http://blog.csdn.net/u014743697/article/details/53579380 http://b…

【370天】跃迁之路——程序员高效学习方法论探索系列(实验阶段128-2018.02.10)...

实验说明 从2017.10.6起&#xff0c;开启这个系列&#xff0c;目标只有一个&#xff1a;通过探索新的学习方法&#xff0c;用2年的时间&#xff0c;实现2.5倍速的成长&#xff0c;获得普通程序员> 5年的技术水平。实验期2年&#xff08;2017.10.06 - 2019.10.06&#xff09;…

Eclipse下svn的创建分支/合并/切换使用 collabnet合并插件的安装 图文:eclipse中SVN分支合并到主干

部分内容来自from&#xff1a; http://blog.csdn.net/lisq037/article/details/17501327 https://www.open.collab.net/downloads/desktops/installing_cdee.html?_d最近接项目要求&#xff0c;要在svn主干上创建分支&#xff0c;用分支来进行程序的bug修改&#xff0c;而主干…

代码自动生成,避免重复性劳动,程序猿解放时间陪家人

前序 你有没有觉得自己常常写重复的代码&#xff0c;面试造轮船&#xff0c;上班拧螺丝&#xff1f; 你有没有常觉得&#xff0c;自己明明可以更快地写好功能模块&#xff0c;却要不断地 Ctrl C 、Ctrl V &#xff1f; 前序一、java代码自动生成系统开发1.1 开发环境1.2 已…

在Visualsvn Server上创建svn账号和密码

VisualSVN Server是一个集成的svn服务端工具,是一款svn服务端不可多得的好工具。可以先安装好VisualSVN Server后,运行VisualSVN Server Manger,然后创建新的代码库,并设置一下安全性能,其次我们就创建一个用户了。按照上面的过程,分别添加用户等。相对于之前用secureCRT执行Li…

android 安卓 轮子大全 例子库 下载安卓源码

安卓源码下载大全 轮子库 这里有安卓的源码大全&#xff0c;内含几千个demo例子&#xff0c;几乎覆盖所有的市面上UI设计功能点的需求&#xff0c;保存一份&#xff0c;就是求职工作多一份报障。 android实例源码&#xff0c;很好很强大… 丰富的页面展示效果类别&#xff1a; …