android中WebView附件問題解決

      網(wǎng)友投稿 944 2025-04-02

      現(xiàn)在的很多app項目中都有嵌入html的需求,這么設(shè)計產(chǎn)品有很多好處,一個html可以同時在很多平臺上跑(Android,ios,web端)。

      Android 角度來講 加載html所用的組件是 webview。

      webview的好處我們其實都清楚:1.可以直接顯示和渲染web頁面

      2.直接顯示網(wǎng)頁webview可以直接用html文件(網(wǎng)絡(luò)上或本地assets中)作布局

      3.可以和JavaScript交互調(diào)用

      但是同時,也給我們帶來一些問題,比如在html上面有一些 超鏈接形式的附件:xxx.pdf ,xxx.doc等等。

      ios是可以直接解析加載出這些文件的,估計這個是ios瀏覽器內(nèi)核強大的原因,但是android 默認(rèn)是無法解析顯示出這種附件的。

      android的 webview只是一個對瀏覽器內(nèi)核的封裝,本身不具備打開word,excel,ppt,pdf文件的功能,即使可以打開,也必須借助第三方的專用插件或者poi庫。

      ios的效果是默認(rèn)在當(dāng)前界面可以直接打開附件的文件,產(chǎn)品認(rèn)為這個android肯定也可以做到(無法和產(chǎn)品解釋,解釋太多就是自己菜)。

      但是我從網(wǎng)上查找資料的時候發(fā)現(xiàn)android如果想在線閱讀的話,可以用google提供的在線解析pdf功能

      Java代碼

      WebView webview = (WebView) findViewById(R.id.webview);

      webview.getSettings().setJavaScriptEnabled(true);

      String pdf ="http://..../a.pdf";

      webview.loadUrl("http://docs.google.com/gview?embedded=true&url=" + pdf);

      本來很高興,但是仔細(xì)觀察url,根本就是在扯,這訪問的是goole啊 ,怎么能保證用戶的每個手機都能連接vpn 訪問谷歌呢。 所以這種方法根本行不通。

      繼續(xù)研究 還有兩種方法

      1.如果想在線閱讀,但是又不想使用google提供的在線解析的話,本地需要安裝對應(yīng)的插件,比如pdf插件,word插件等。就像用ie,firefox播放flash一樣,需要安裝flash插件。

      2.如果想用webview直接打開本地的pdf文件啥的,可以使用apache的poi來解析word,excel,ppt,pdf等。也就是說,需要使用poi開發(fā)你的webview程序。

      這兩種方法第一種是要單獨裝插件,第二種是用第三方框架對文件先做解析,解析出一個html,然后再顯示。

      總之這兩種效果都覺得不是很妥當(dāng)。

      沒有頭緒的時候,我用qq做了一個測試,把我們的html鏈接發(fā)到我手機qq上 ,然后在qq上點擊html上的附件,發(fā)現(xiàn)是先下載,然后提示用手機上相關(guān)軟件打開,比如 三方瀏覽器(UC瀏覽器,QQ瀏覽器)還有office等。

      后來我們也就沒做在線解析直接打開,也是做的像qq一樣先下載然后依賴第三方軟件打開。我覺得也比較合理(1.這種功能沒有必要花那么多時間做的那么復(fù)雜 ?2.遵循主流軟件處理方式)。

      webview下載文件的代碼:

      package com.baobao.webview;

      import com.cx.httpwebview.R;

      import android.annotation.SuppressLint;

      import android.app.Activity;

      import android.content.Intent;

      import android.net.Uri;

      import android.os.Bundle;

      import android.view.Window;

      import android.webkit.DownloadListener;

      import android.webkit.WebChromeClient;

      import android.webkit.WebView;

      import android.webkit.WebViewClient;

      import android.widget.TextView;

      public class MainActivity extends Activity {

      private TextView textView;

      private WebView webView;

      /** mUrl測試連接url 這個可以換成自己的html路徑 ,

      * 自己服務(wù)器上html上面可以放pdf附件或者doc附件 圖片附件。

      * 如果是文檔文件 ,就是調(diào)用系統(tǒng)瀏覽器下載,如果安裝了多個瀏覽器,會彈出選擇界面;如果是圖片就是直接打開效果*/

      private String mUrl = "http://shouji.baidu.com";

      @SuppressLint("SetJavaScriptEnabled")

      @Override

      protected void onCreate(Bundle savedInstanceState) {

      super.onCreate(savedInstanceState);

      requestWindowFeature(Window.FEATURE_NO_TITLE);

      setContentView(R.layout.activity_main);

      textView = (TextView) findViewById(R.id.textView1);

      webView = (WebView) findViewById(R.id.webView1);

      webView.getSettings().setJavaScriptEnabled(true);

      webView.setWebViewClient(new WebViewClient(){

      public boolean shouldOverrideUrlLoading(WebView view, String url) {

      view.loadUrl(url);

      return true;

      }

      });

      webView.setWebChromeClient(new WebChromeClient(){

      @Override

      public void onReceivedTitle(WebView view, String title) {

      textView.setText(title);

      super.onReceivedTitle(view, title);

      }

      });

      webView.setDownloadListener(new MyDownloadStart());

      webView.loadUrl(mUrl);

      }

      class MyDownloadStart implements DownloadListener{

      @Override

      android中WebView附件問題解決

      public void onDownloadStart(String url, String userAgent,

      String contentDisposition, String mimetype, long contentLength) {

      //調(diào)用自己的下載方式

      // new HttpThread(url).start();

      //調(diào)用系統(tǒng)瀏覽器下載

      Uri uri = Uri.parse(url);

      Intent intent = new Intent(Intent.ACTION_VIEW, uri);

      startActivity(intent);

      }

      }

      }

      核心就上面這幾行代碼,最后附上demo文件。習(xí)慣寫博客給個小demo ,即使是很簡單的功能,感覺比較直觀。

      DEMO源碼下載

      大家如果還有其它問題,也可以加入我們的qq群:454430053

      Android WebView

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:ICT【計算機網(wǎng)絡(luò)】學(xué)習(xí)筆記一
      下一篇:excel如何將文本數(shù)據(jù)批量轉(zhuǎn)換成數(shù)字格式(excel怎么批量將文本轉(zhuǎn)化為數(shù)字)
      相關(guān)文章
      亚洲系列国产精品制服丝袜第| 亚洲国语精品自产拍在线观看| 亚洲午夜电影一区二区三区| 午夜亚洲AV日韩AV无码大全| 亚洲成在人天堂一区二区| 亚洲AV永久青草无码精品| 国产亚洲人成网站在线观看不卡| 亚洲欧洲∨国产一区二区三区| 国外亚洲成AV人片在线观看| 久久久久亚洲AV综合波多野结衣| 亚洲一级特黄无码片| 亚洲色欲色欲www在线丝| 亚洲狠狠婷婷综合久久久久 | 亚洲美女视频网站| 亚洲色偷偷av男人的天堂| 亚洲精品国产第1页| 亚洲国产成人精品电影| 亚洲AV色吊丝无码| 精品国产成人亚洲午夜福利| 亚洲欧洲无码AV不卡在线| 亚洲国产成人精品无码区二本| 亚洲av永久无码精品秋霞电影秋| 日韩色日韩视频亚洲网站| 亚洲国产成人久久综合一区77| 亚洲免费日韩无码系列 | 国产精品亚洲四区在线观看| 亚洲精品无码久久久久久| 亚洲av色香蕉一区二区三区 | 亚洲欧洲国产成人综合在线观看| 久久亚洲精品无码播放| 亚洲精品午夜无码电影网| 久久久久亚洲精品天堂| 亚洲一区二区三区久久| 亚洲日韩国产二区无码| 国产综合成人亚洲区| 中国亚洲女人69内射少妇| 久久精品国产亚洲AV麻豆不卡| 久久亚洲精品无码VA大香大香| 亚洲日本人成中文字幕| 激情无码亚洲一区二区三区| 国产亚洲人成A在线V网站|