本地html文件的打开方法

    技术2022-05-19  22

    转自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();     } }

    最新回复(0)