WebView加载附件,和pnd格式显示

首先我们要自定义一个获取附件地址的工具类

自定义桥接规则,判断是否是自己的设定好的字段

//HTML5跳转工具
public class Html5URLJumpTool {

    //自定义截取字段,判断是否是自己的规则
    public static final String clickprojectSaydetail = "clickprojectSaydetail";
    public static final String legitimateScheme = "haleyaction";//schmem标志
    public static final String legitimateSchemeIfHttp = "http";//schmem标志

    /**
     * 判断scheme是否合法
     */
    public static boolean judgeSchemeIflegitimate(Uri uri){
        String scheme = uri.getScheme();
        if(!legitimateScheme.equals(scheme)){
            return false;
        }
        return true;
    }

    /**
     * 判断scheme是否是http
     */
    public static boolean judgeSchemeIfHttp(Uri uri){
        String scheme = uri.getScheme();
        if(!legitimateSchemeIfHttp.equals(scheme)){
            return false;
        }
        return true;
    }

    /**
     * 跳转URL
     */
    public static void jumpURL(String URL, Activity activity){
        //URL非空验证
        if(TextUtils.isEmpty(URL)){
            return;
        }
        Uri interceptURL = Uri.parse(URL);
        //scheme合法验证
        if(judgeSchemeIflegitimate(interceptURL)){
            String getAuthority = interceptURL.getAuthority();
            String getQuery = interceptURL.getQuery();
            implementJump(getAuthority,getQuery,activity);
            return;
        }
    }
    /**
     * 获取键值对
     */
    public static Map<String,String> getQuery(String query){
        if(TextUtils.isEmpty(query)){
            return null;
        }
        Map<String,String> keyValueMap = new HashMap<String, String>();
        String[] keyMap = query.split("&");
        for(String keyMapstr :keyMap){
            String[] keyvalue = keyMapstr.split("=");
            if(keyvalue !=null && keyvalue.length == 2){
                keyValueMap.put(keyvalue[0],keyvalue[1]);
            }
        }
        return keyValueMap.size()>0?keyValueMap:null;
    }

    /**
     * 执行跳转
     * ----getAuthority---clickplayReply---getQuery----id=52905445857005568&courseId=50455850270949376
     */
    public static void implementJump(String getAuthority,String getQuery,Activity activity){

        Intent intent = new Intent(activity, AnnexActivity.class);//设置跳转附件的页面
        Map<String,String> live_map = getQuery(getQuery);//获取键值对
        for (String s: live_map.keySet()) {
            String s1 = live_map.get(s);
        }
        if(live_map !=null && live_map.size() >0 && live_map.containsKey("url")) {
            String url = live_map.get("url");
            intent.putExtra("url",url);
            activity.startActivity(intent);
        }

    }
}

 

然后设置点击附件

webView.getSettings().setJavaScriptEnabled(true);
webView.setWebChromeClient(new WebChromeClient());
webView.setWebViewClient(new WebViewClient() {
    //当web点击触发的时候触发该方法
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        Html5URLJumpTool.jumpURL(url,DetailsActivity.this);
        return false;
    }
});

最后设置跳转页面显示附件

webview.setWebViewClient(new AppWebViewClients());
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setUseWideViewPort(true);
webview.loadUrl("http://view.officeapps.live.com/op/view.aspx?src=" + url);

 

附件页面

附页页面设置一个webview就可以

如果是.pdf格式,需要我们引用第三方处理

首先导入依赖

implementation  'com.github.barteksc:android-pdf-viewer:3.0.0-beta.5'

然后XML文件

<com.github.barteksc.pdfviewer.PDFView
    android:id="@+id/web"
    android:layout_width="match_parent"
    android:layout_height="match_parent"></com.github.barteksc.pdfviewer.PDFView>

最后

mWeb = (PDFView) findViewById(R.id.web);
new AsyncTask<String, Void, InputStream>() {
    @Override
    protected InputStream doInBackground(String... strs) {
        URL url = null;
        try {
            url = new URL(strs[0]);
            HttpURLConnection connection = (HttpURLConnection)
                    url.openConnection();
            connection.setRequestMethod("GET");//试过POST 可能报错
            connection.setDoInput(true);
            connection.setConnectTimeout(10000);
            connection.setReadTimeout(10000);
            //实现连接
            connection.connect();

            if (connection.getResponseCode() == 200) {
                InputStream is = connection.getInputStream();
                //这里给过去就行了
                return is;
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (ProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(InputStream inputStream) {
        super.onPostExecute(inputStream);

        mWeb.fromStream(inputStream)
                .enableSwipe(true)
                .swipeHorizontal(false)
                .enableDoubletap(true)
                .defaultPage(0)
                .onPageScroll(new OnPageScrollListener() {
                    @Override
                    public void onPageScrolled(int page, float positionOffset) {

                    }
                })
                .onError(new OnErrorListener() {
                    @Override
                    public void onError(Throwable t) {
                        Toast.makeText(getApplicationContext(), "error", Toast.LENGTH_SHORT).show();
                    }
                })
                .enableAnnotationRendering(false)
                .password(null)
                .scrollHandle(null)
                .load();
    }
}.execute(ur);

 

转载于:https://my.oschina.net/u/3698786/blog/1825415

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值