Android中使用系统自带浏览器打开本地assets目录下的html文件

将html文件放到assets目录下,我所知道的访问的方式有两种,一种是使用webview,一种是使用流,使用webView比较容易实现,使用流的话需要先将html文件复制到sdcard中,然后再打开;参考了网上许多资料,均未能实现直接打开的方法。

下面是源码,界面上只有一个按钮,所以布局文件就没有给出,

是将assets目录下的html文件复制到sdcard的工具类。
public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		this.findViewById(R.id.localHtml).setOnClickListener(
				new OnClickListener() {

					@Override
					public void onClick(View v) {
						// TODO Auto-generated method stub

						Intent intent = new Intent();
						intent.setAction("android.intent.action.VIEW");
						
						//获取html文件复制到sdcard后的路径,test.html是我放到项目中assets目录下的网页文件
						String path = new AssertToSdcard().transFilePath(
								MainActivity.this, "test.html");
						if (null != path) {
							// Uri content_url = Uri.parse("file:///storage/sdcard/test.html");
							//使用此种方法获取uri或者使用上面注释的方法获取uri
							Uri content_url = Uri.fromFile(new File(path));
							intent.setData(content_url);
							//intent.setClassName("com.android.browser","com.android.browser.BrowserActivity");
							intent.setComponent(new ComponentName("com.android.browser","com.android.browser.BrowserActivity"));
							startActivity(intent);
						} else {
							Log.e("--->", "no path");
						}

					}
				});

	}

}

public class AssertToSdcard {

	private InputStream is;
	private OutputStream os;
	private File sdcardFile = null;
	private String sdcardFilePath = null;

	/**
	 * 
	 * @param context
	 *            用于获取sd路径
	 * @param AssetsFileName
	 *            放入assets中的html文件名
	 * @return 
	 * 			  AssetsFileName文件复杂到sd卡后的路径
	 */
	public String transFilePath(Context context, String AssetsFileName) {

		sdcardFile = getSdcardPath();

		if (null == sdcardFile) {
			return null;
		}

		sdcardFilePath = sdcardFile + File.separator + AssetsFileName;
		Log.i("--->", "" + sdcardFile.getAbsolutePath());

		if (new File(sdcardFilePath).exists()) {
			return sdcardFilePath;
		}

		try {
			is = context.getAssets().open(AssetsFileName);
			os = new FileOutputStream(sdcardFilePath);
			byte[] buffer = new byte[1024];
			int count = 0;
			while ((count = is.read(buffer)) > 0) {
				os.write(buffer, 0, count);
			}
			os.close();
			is.close();

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return sdcardFilePath;
	}

	private File getSdcardPath() {
		File sdcardpath = null;
		if (Environment.getExternalStorageState().equals(
				Environment.MEDIA_MOUNTED)) {
			sdcardpath = Environment.getExternalStorageDirectory();
		}
		return sdcardpath;
		// TODO Auto-generated method stub

	}

}


 
 

 
 

                
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android,可以使用Intent来启动系统的其他应用程序,比如浏览器。因此,你可以在SpannableString添加一个ClickableSpan,重写onClick方法,在这个方法启动浏览器打开assets下的html文件。具体的实现步骤如下: 1. 在SpannableString添加一个ClickableSpan,重写onClick方法,在这个方法启动浏览器。代码示例: ``` java ClickableSpan clickableSpan = new ClickableSpan() { @Override public void onClick(View widget) { Intent intent = new Intent(Intent.ACTION_VIEW); Uri uri = Uri.parse("file:///android_asset/your_html_file.html"); intent.setDataAndType(uri, "text/html"); startActivity(intent); } }; ``` 注意,这里的your_html_file.html是你在assets目录下的html文件名。 2. 在AndroidManifest.xml添加如下权限: ``` xml <uses-permission android:name="android.permission.INTERNET" /> ``` 这是因为浏览器需要访问网络权限才能加载html文件。 3. 在SpannableString设置ClickableSpan并且将其设置为可点击的。代码示例: ``` java SpannableString spannableString = new SpannableString("Click here to open html file"); spannableString.setSpan(clickableSpan, 0, spannableString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); textView.setText(spannableString); textView.setMovementMethod(LinkMovementMethod.getInstance()); ``` 注意,这里的textView是你要显示SpannableString的TextView。 现在,当用户点击SpannableString时,系统会启动浏览器,并且打开assets下的html文件

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值