转自http://www.bangchui.org/read.php?tid=8857
有些html文件放在本地磁盘和sdcard,如何用打开这个网页呢? 这种应用在测试时非常有用。 有2个方法: 1. 使用文件管理器 如ES等,需要幸运的是你的文件管理器直接用浏览器打开。 2. 在浏览器输入地址 访问本地磁盘和SD卡上的HTML,前部分content://com.android.htmlfileprovider是Provider的标准,后面是程序目录。 比如sdcard的tesl.html 直接在浏览器里输入
content://com.android.htmlfileprovider/sdcard/test.html
回车就可以看到网页了。
webView.loadUrl("content://com.android.htmlfileprovider/sdcard/test.html")
如果是其它程序的私有html文件,这样做会失败。 这 是由于com.android.htmlfileprovider的权限不够,如果是重写一个私有的HtmlProvider位于同一个应用中,应该能解 决问题。然后就参考了原来的com.android.htmlfileprovider 源代码,改写了下。问题解决了,使用私有的HTMLProvider,可以轻松的访问手机内存中,程序私有目录下的html文件。 网上有例子;
package com.motodev.example; import java.io.File; import java.io.FileNotFoundException; import android.content.ContentProvider; import android.content.ContentValues; import android.database.Cursor; import android.net.Uri; import android.os.ParcelFileDescriptor; public class LocalHtmlProvider extends ContentProvider { public static final Uri CONTENT_URI = Uri .parse("content://com.motodev.example.localhtmlprovider"); public static final String BASE_URI = "content://com.motodev.example.localhtmlprovider"; public static final int BASE_URI_LEN = BASE_URI.length(); @Override public int delete(Uri uri, String selection, String[] selectionArgs) { throw new UnsupportedOperationException(); } @Override public String getType(Uri uri) { String mimetype = uri.getQuery(); return mimetype == null ? "" : mimetype; } @Override public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException { if (!"r".equals(mode)) { throw new FileNotFoundException("Bad mode for " + uri + ": " + mode); } String filename = uri.toString().substring(BASE_URI_LEN); return ParcelFileDescriptor.open(new File(filename), ParcelFileDescriptor.MODE_READ_ONLY); } @Override public Uri insert(Uri uri, ContentValues values) { throw new UnsupportedOperationException(); } @Override public boolean onCreate() { return true; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { throw new UnsupportedOperationException(); } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { throw new UnsupportedOperationException(); } }