1. 程式人生 > >Android webview載入本地圖片

Android webview載入本地圖片

出於安全的考慮,一般情況下webview並不允許網頁讀取和操作網頁檔案所在資料夾外的檔案。

在網上搜索後,發現有3種可行的方法:

1、使用WebView自身的資源攔截與回撥來實現該功能;
WebView的shouldInterceptRequest回撥從API 11才開始引入,所以使用該方法不能相容2.2與2.3的系統;

2、img的src使用base64的編碼格式,這種方法會造成html檔案較大,輕量的網頁可以考慮使用;

3、img的src使用content協議,通過ContentProvider來進行提供相應資源; 

方法2和方法3都可以相容2.x的系統

方法3的例子:

  1. com.packagename.provider;  
  2. publicclass MyProvider extends ContentProvider {   
  3.      @Override
  4.      public ParcelFileDescriptor openFile(Uri uri, String mode){  
  5.         URI fileURI = URI.create( "file://" + uri.getPath() );  
  6.         File file = new File( fileURI );  
  7.         ParcelFileDescriptor parcel = null;  
  8.         try {  
  9.             parcel = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);  
  10.         } catch (FileNotFoundException e) {  
  11.             Log.e( TAG, "Error finding: " + fileURI + "\n" + e.toString() );  
  12.         }  
  13.         return parcel;  

AndroidManifest.xml
  1. <provider
  2.        android:name
    =".provider.MyProvider"
  3.        android:authorities="com.packagename"/>

You can then access your files which would normally be

<code style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif;"><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: transparent;"> file</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: transparent;">:</span><span class="com" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: gray; background-color: transparent;">//sdcard/Android/data/com.packagename/image.jpg</span></code>

by using

<code style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif;"><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: transparent;"> content</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: transparent;">:</span><span class="com" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: gray; background-color: transparent;">//com.packagename/sdcard/Android/data/com.packagename/image.jpg</span></code>

So essentially replace file:// with content://com.packagename


相關推薦

Android webview載入本地圖片

出於安全的考慮,一般情況下webview並不允許網頁讀取和操作網頁檔案所在資料夾外的檔案。 在網上搜索後,發現有3種可行的方法: 1、使用WebView自身的資源攔截與回撥來實現該功能; WebView的shouldInterceptRequest回撥從API 11才

Android使用WebView載入本地圖片終極大殺招

WebView 主要呼叫三個方法:loadUrl、loadData、loadDataWithBaseURL。 1、loadUrl 直接載入網頁、圖片並顯示。(本地或是網路上的網頁、圖片、gif) 2、loadData 顯示文字與圖片內容

android studio中新建assets,用webview載入本地圖片

xml檔案中建立webview <WebView android:id="@+id/wv_explain" android:layout_width="match_parent" android:layout_hei

android webview載入html圖片自適應手機螢幕大小&點選檢視大圖

我們在開發中,顯示資訊詳情時,一般後臺會給出html文字,在Android端一般採用webview控制元件來展示,但是後臺給出的html文字一般是給電腦端用的,沒有自適配手機,導致手機端圖片顯示過大,需要左右移動來檢視全圖。下面給出幾種實用方法,達到在手機端用webvi

android webview 載入本地html並且解決多圖卡頓問題

使用webview載入本地html,因為本地html使用多張圖片,滑動起來卡頓,解決方法如下: 把資料夾放入assets資料夾下 Activity載入: WebView wView = (

ANDROID webview載入本地內容程式碼

由於我目前的應用大部分為html網頁內容,所以之前一直沿用webview.load(url)的方式來載入網頁,所以就出現了很多網頁載入很慢的情況,看網上所述大部分由載入遠端載入js,css導致的。所以就把webview.load(url)調整為載入本地內容,js和css均有

android ImageLoader載入本地圖片的工具類

import android.widget.ImageView; import com.nostra13.universalimageloader.core.ImageLoader; /** * 非同步載入本地圖片工具類 * */ public class Loa

android-WebView載入本地html、本apk內html和遠端URL

WebView(網路檢視)能載入顯示網頁,可以將其視為一個瀏覽器。它使用了WebKit渲染引擎載入顯示網頁,實現WebView有以下兩種不同的方法: 第一種方法的步驟: 1.在要Activity中例

android webView載入gif圖片並且居中顯示

開源的gifView在我使用的時候 記憶體不釋放,容易引起記憶體洩露,最後不得不使用webView gif圖片放到asset資料夾下邊, WebViewgf1=(WebView) findViewById(R.id.gif1); gf1.loadDataWithBaseU

android載入本地圖片到記憶體

首先先來了解下下面這些名詞的關係: 名詞 解釋 px 螢幕上的點就是由畫素點組成的,可以說是絕對的單位 Density 螢幕密度 DensityDpi 每英寸的畫素數:160dpi代表著每英寸有160px的畫

weex 載入三端(android ios web) 本地圖片 解決(專案中已實踐)

  本文講解內容為weex載入三端本地圖片,所寫解決方案均已驗證,使用sdk版本為0.18.0,其他版本不能保證可行。   weex載入圖片方式有三種,1.src直接引用base64編碼,2.載入網路圖片,3.載入本地圖片(三端分別放在專案目錄)。前兩種都是比較簡單直接,第三種相對初

android WebView載入URL不顯示圖片

WebSettings settings = mWebView.getSettings(); settings.setJavaScriptEnabled(true);//

Android webview 載入https:// 網站時不展示 圖片資源

可能原因是:該圖片資源不是https的; 解決辦法: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { webSettings.setMixedContentMode(WebSetti

android WebView載入html 處理的圖片過寬的工具類 (過寬的控制到100%,正常尺寸的不放大)

參考 部落格: 小曾同志的專欄: https://blog.csdn.net/u010023795/article/details/53509495 工具類 import org.jsoup.Jsoup; import org.jsoup.nodes.Document; impor

Android Webview 載入外部html時選擇載入本地的js,css等資原始檔

在使用WebView載入網頁的時候,有一些固定的資原始檔如js的jquery包,css,圖片等資源會比較大,如果直接從網路載入會導致頁面載入的比較慢,而且會消耗比較多的流量。所以這些檔案應該放在assets裡面同app打包。 要解決這個問題需要用到API 11(HONEYC

Android WebView載入圖片顯示過大的處理

Webview載入圖片時,經常會遇到圖片顯示不符合預期的問題。下面給出解決辦法:利用Jsoup解析html指定img標籤的寬高屬性來解決。小提示:("width", "100%")——>解決了圖片過大,超出螢幕顯示的問題,但是此時會帶來一個新的bug,就是當圖片小於螢幕

Android 載入本地圖片(檔案管理器中的圖片牆)

Android 載入本地圖片(檔案管理器中的圖片牆) --關於圖片牆的一些感悟與疑問,希望大家共同探討。 (By伊葉也) 圖片顯示及監聽 1、圖片顯示:基本上就5種顯示形式(如果同時嵌入5種形式,採用

Android生成PDF檔案、webview載入本地PDF或者網路PDF

生成pdf Andrid端生成PDF侷限性太差,尚未有優雅的解決方案。但網上眾說紛紜,實踐者少之又少,高質量的博文也是鳳毛麟角,大家都是博文搬用工,也沒有誰做過詳細的探索。筆者就自己的一點經驗做點分享。 使用iText iText不支援中文,要

Android】Picasso載入本地圖片如何清理快取cache?

使用Picasso載入SD卡圖片的時候,Picasso也會對該圖片進行快取。所以如果該圖片即使已經變了,Picasso在載入時會仍然使用快取,而不更新圖片。 Picasso快取策略 我們都知道圖片快取使用的是Map鍵值對儲存的,這裡的Key就

Android WebView載入Html文字不能適配,以及圖片中間有空白的問題

1.WebView載入Html文字的正確方式 webView.loadData(html, "text/html; charset=utf-8", "utf-8"); 2.但是如果文字中帶圖片的