Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 高級開發 >> android手機開發 使用webkit時 遠程頁面引用本地資源

android手機開發 使用webkit時 遠程頁面引用本地資源

編輯:高級開發

僅提供引用android工程中assets目錄下資源的方法

  如果要引用sdcard上的資源,代碼中也給出了參考。自己改

  主要就是提供一個ContentProvider,並修改在頁面中的引用為content://你的URI前綴/實際的地址

  如:

  < img src="content://com.xxxxx.localfile/icon.png"/>

  貼代碼吧

  Java代碼

  package com.xxxxxxx;

  import Java.io.FileNotFoundException;

  import Java.io.IOException;

  import android.content.ContentProvider;

  import android.content.ContentValues;

  import android.content.res.AssetFileDescriptor;

  import android.content.res.AssetManager;

  import android.database.Cursor;

  import android.Net.Uri;

  /**

  * 加載本地文件的內容提供者

  *

  * @author a7

  *

  */

  public class LocalFileContentProvider extends ContentProvider {

  private static final String URI_PREFIX = "content://com.xxxxxx.localfile";

  public static String constructUri(String url) {

  Uri uri = Uri.parse(url);

  return uri.isAbsolute() ? url : URI_PREFIX + url;

  }

  @Override

  /**

  * 直接讀取程序中的資源文件

  * 取sd卡文件實現openfile方法即可,需要用到ParcelFileDescriptor

  *

  */

  public AssetFileDescriptor openAssetFile(Uri uri, String mode)

  throws FileNotFoundException {

  // TODO Auto-generated method stub

  AssetManager am = getContext().getAssets();

  String path = uri.getPath().substring(1);

  try {

  AssetFileDescriptor afd = am.openFd(path);

  return afd;

  } catch (IOException e) {

  }

  return super.openAssetFile(uri, mode);

  }

  @Override

  public boolean onCreate() {

  return true;

  }

  接上頁

  @Override

  public int delete(Uri uri, String s, String[] as) {

  throw new UnsupportedOperationException(

  "Not supported by this provider");

  }

  @Override

  public String getType(Uri uri) {

  throw new UnsupportedOperationException(

  "Not supported by this provider");

  }

  @Override

  public Uri insert(Uri uri, ContentValues contentvalues) {

  throw new UnsupportedOperationException(

  "Not supported by this provider");

  }

  @Override

  public Cursor query(Uri uri, String[] as, String s, String[] as1, String s1) {

  throw new UnsupportedOperationException(

  "Not supported by this provider");

  }

  @Override

  public int update(Uri uri, ContentValues contentvalues, String s,

  String[] as) {

  throw new UnsupportedOperationException(

  "Not supported by this provider");

  }

  }

  package com.xxxxxxx;

  import Java.io.FileNotFoundException;

  import Java.io.IOException;

  import android.content.ContentProvider;

  import android.content.ContentValues;

  import android.content.res.AssetFileDescriptor;

  import android.content.res.AssetManager;

  import android.database.Cursor;

  import android.Net.Uri;

  /**

  * 加載本地文件的內容提供者

  *

  * @author a7

  *

  */

  public class LocalFileContentProvider extends ContentProvider {

  private static final String URI_PREFIX = "content://com.xxxxxx.localfile";

  public static String constructUri(String url) {

  Uri uri = Uri.parse(url);

  return uri.isAbsolute() ? url : URI_PREFIX + url;

  }

  @Override

  /**

  * 直接讀取程序中的資源文件

  接上頁

  * 取sd卡文件實現openfile方法即可,需要用到ParcelFileDescriptor

  *

  */

  public AssetFileDescriptor openAssetFile(Uri uri, String mode)

  throws FileNotFoundException {

  // TODO Auto-generated method stub

  AssetManager am = getContext().getAssets();

  String path = uri.getPath().substring(1);

  try {

  AssetFileDescriptor afd = am.openFd(path);

  return afd;

  } catch (IOException e) {

  }

  return super.openAssetFile(uri, mode);

  }

  @Override

  public boolean onCreate() {

  return true;

  }

  @Override

  public int delete(Uri uri, String s, String[] as) {

  throw new UnsupportedOperationException(

  "Not supported by this provider");

  }

  @Override

  public String getType(Uri uri) {

  throw new UnsupportedOperationException(

  "Not supported by this provider");

  }

  @Override

  public Uri insert(Uri uri, ContentValues contentvalues) {

  throw new UnsupportedOperationException(

  "Not supported by this provider");

  }

  @Override

  public Cursor query(Uri uri, String[] as, String s, String[] as1, String s1) {

  throw new UnsupportedOperationException(

  "Not supported by this provider");

  }

  @Override

  public int update(Uri uri, ContentValues contentvalues, String s,

  String[] as) {

  throw new UnsupportedOperationException(

  "Not supported by this provider");

  }

  }

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved