前言:工作中经常会碰到文件的在线预览问题,今天恰巧刚好写了一个小demo,记录一下。
首先,介绍一下几个目前比较常见的处理方式:
1、文件下载,通过第三方工具打开
这种方式需要用户先把文件下载后,再通过wps等软件打开,步骤较为繁琐,用户体验极差
2、利用腾讯、百度等提供的SDK
可以到官方下载SDK以及介绍等,腾讯提供的SDK虽然看似实现了在线预览,但是实际上也是经历了一个“下载—打开—删除”
的过程,简而言之其仅仅支持打开本地文件
3、利用微软在线工具+WebView实现
这种方式虽然需要跳转网页,加载速度有点慢,但是其用户体验相比较于第一种还是要强很多的;除此之外,利用WebView以网页跳转的形式在线预览不需要集成第三方SDK,一定程度上可以减轻APP的体积
综上所述,我最终选用了第三种方案
DEMO实现过程:
1、创建MainActivity,点击TextView跳转OfficeViewActivity并且传递文档的url
@OnClick(R.id.start) public void onViewClicked() { Intent intent = new Intent(MainActivity.this,OfficeViewActivity.class); //测试url String testUrl = "http://oss.rujiaowang.net/document/13566668888/%E3%80%90%E5%AD%A6%E6%A1%88%E3%80%916.1%20%E4%BA%BA%E7%9A%84%E8%AE%A4%E8%AF%86%E4%BB%8E%E4%BD%95%E8%80%8C%E6%9D%A5.doc"; intent.putExtra("fileUrl",testUrl); startActivity(intent); }
2、接收到url,利用WebView的loadUrl跳转
preView("http://view.officeapps.live.com/op/view.aspx?src="+fileUrl+"");
private void preView(String fileUrl) { webview.loadUrl(fileUrl); webview.setWebChromeClient(webChromeClient); webview.setWebViewClient(webViewClient); WebSettings webSettings = webview.getSettings(); webSettings.setJavaScriptEnabled(true);//允许使用js webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);//不使用缓存,只从网络获取数据. webSettings.setSupportZoom(true); webSettings.setBuiltInZoomControls(true); //不显示webview缩放按钮 webSettings.setDisplayZoomControls(false); }
3、重写返回键
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { //重写返回键 if (webview.canGoBack() && keyCode == KeyEvent.KEYCODE_BACK) { // /点击返回按钮的时候判断有没有上一页 webview.goBack(); // goBack()表示返回webView的上一页面 return true; } return super.onKeyDown(keyCode, event); }
最后,附上demo地址