android 浏览器 打开本地html文件的方法

 

android 浏览器 打开本地html文件的方法

有些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
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值