首先咱们要自定义一个获取附件地址的工具类android
自定义桥接规则,判断是不是本身的设定好的字段git
//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); } } }
而后设置点击附件github
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; } });
最后设置跳转页面显示附件web
webview.setWebViewClient(new AppWebViewClients()); webview.getSettings().setJavaScriptEnabled(true); webview.getSettings().setUseWideViewPort(true); webview.loadUrl("http://view.officeapps.live.com/op/view.aspx?src=" + url);
附件页面app
附页页面设置一个webview就能够ide
若是是.pdf格式,须要咱们引用第三方处理工具
首先导入依赖this
implementation 'com.github.barteksc:android-pdf-viewer:3.0.0-beta.5'
而后XML文件url
<com.github.barteksc.pdfviewer.PDFView android:id="@+id/web" android:layout_width="match_parent" android:layout_height="match_parent"></com.github.barteksc.pdfviewer.PDFView>
最后orm
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);