Browser配置默认书签——string.xml中<string-array name="bookmarks" translatable="false">下添加书签item.

 <!-- Bookmarks -->
<string-array name="bookmarks" translatable="false">
<item>百度</item>
<item>http://m.baidu.com/?from=1000235a</item>
<item>新浪</item>
<item>http://3g.sina.cn</item>
<item>腾讯网</item>
<item>http://3g.qq.com</item>
<item>搜狐</item>
<item>http://m.sohu.com/?_trans_=000011_tysj_sysq</item>
<item>网易</item>
<item>http://3g.163.com/</item>
</string-array>

加载过程——BrowserProvider2创建数据库,初始化table数据时,插入书签数据。

<application
android:name="Browser"
android:backupAgent=".BrowserBackupAgent"
android:hardwareAccelerated="true"
android:icon="@mipmap/ic_launcher_browser"
android:label="@string/application_name"
android:taskAffinity="android.task.browser"
android:theme="@style/Theme.Setting.Light" >
<provider
android:name=".provider.BrowserProvider2"
android:authorities="com.android.browser;browser"
android:exported="true"
android:multiprocess="false"
android:readPermission="com.android.browser.permission.READ_HISTORY_BOOKMARKS"
android:writePermission="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS" >
<path-permission
android:path="/bookmarks/search_suggest_query"
android:readPermission="android.permission.GLOBAL_SEARCH" />
</provider>
public class BrowserProvider2 extends SQLiteContentProvider

public abstract class SQLiteContentProvider extends ContentProvider
public class BrowserProvider2 extends SQLiteContentProvider {
  final class DatabaseHelper extends SQLiteOpenHelper {
     static final String DATABASE_NAME = "browser2.db";
static final int DATABASE_VERSION = 32;
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
setWriteAheadLoggingEnabled(true);
} @Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + TABLE_BOOKMARKS + "(" +
Bookmarks._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
Bookmarks.TITLE + " TEXT," +
Bookmarks.URL + " TEXT," +
Bookmarks.IS_FOLDER + " INTEGER NOT NULL DEFAULT 0," +
Bookmarks.PARENT + " INTEGER," +
Bookmarks.POSITION + " INTEGER NOT NULL," +
Bookmarks.INSERT_AFTER + " INTEGER," +
Bookmarks.IS_DELETED + " INTEGER NOT NULL DEFAULT 0," +
Bookmarks.ACCOUNT_NAME + " TEXT," +
Bookmarks.ACCOUNT_TYPE + " TEXT," +
Bookmarks.SOURCE_ID + " TEXT," +
Bookmarks.VERSION + " INTEGER NOT NULL DEFAULT 1," +
Bookmarks.DATE_CREATED + " INTEGER," +
Bookmarks.DATE_MODIFIED + " INTEGER," +
Bookmarks.DIRTY + " INTEGER NOT NULL DEFAULT 0," +
BrowserUtils.Bookmarks_VISITES + " INTEGER NOT NULL DEFAULT 0," +
BrowserUtils.Bookmarks_DATE_LAST_VISITED + " INTEGER," +
Bookmarks.SYNC1 + " TEXT," +
Bookmarks.SYNC2 + " TEXT," +
Bookmarks.SYNC3 + " TEXT," +
Bookmarks.SYNC4 + " TEXT," +
Bookmarks.SYNC5 + " TEXT" +
");"); // TODO indices db.execSQL("CREATE TABLE " + TABLE_HISTORY + "(" +
History._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
History.TITLE + " TEXT," +
History.URL + " TEXT NOT NULL," +
History.DATE_CREATED + " INTEGER," +
History.DATE_LAST_VISITED + " INTEGER," +
History.VISITS + " INTEGER NOT NULL DEFAULT 0," +
History.USER_ENTERED + " INTEGER" +
");"); db.execSQL("CREATE TABLE " + TABLE_IMAGES + " (" +
Images.URL + " TEXT UNIQUE NOT NULL," +
Images.FAVICON + " BLOB," +
Images.THUMBNAIL + " BLOB," +
Images.TOUCH_ICON + " BLOB" +
");");
db.execSQL("CREATE INDEX imagesUrlIndex ON " + TABLE_IMAGES +
"(" + Images.URL + ")"); db.execSQL("CREATE TABLE " + TABLE_SEARCHES + " (" +
Searches._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
Searches.SEARCH + " TEXT," +
Searches.DATE + " LONG" +
");"); db.execSQL("CREATE TABLE " + TABLE_SETTINGS + " (" +
Settings.KEY + " TEXT PRIMARY KEY," +
Settings.VALUE + " TEXT NOT NULL" +
");"); createProperties(db);
createAccountsView(db);
createThumbnails(db); mSyncHelper.createDatabase(db); if (!importFromBrowserProvider(db)) {
createDefaultBookmarks(db);//默认书签插入数据库
} enableSync(db);
createOmniboxSuggestions(db);
}
private void createDefaultBookmarks(SQLiteDatabase db) {
ContentValues values = new ContentValues();
// TODO figure out how to deal with localization for the defaults // Bookmarks folder
values.put(Bookmarks._ID, FIXED_ID_ROOT);
values.put(ChromeSyncColumns.SERVER_UNIQUE, ChromeSyncColumns.FOLDER_NAME_BOOKMARKS);
values.put(Bookmarks.TITLE, "Bookmarks");
values.putNull(Bookmarks.PARENT);
values.put(Bookmarks.POSITION, 0);
values.put(Bookmarks.IS_FOLDER, true);
values.put(Bookmarks.DIRTY, true);
db.insertOrThrow(TABLE_BOOKMARKS, null, values); addDefaultBookmarks(db, FIXED_ID_ROOT);
} private void addDefaultBookmarks(SQLiteDatabase db, long parentId) {
Resources res = getContext().getResources();
final CharSequence[] bookmarks = res.getTextArray(
R.array.bookmarks);
int size = bookmarks.length;
Log.i("antoon", TAG+", addDefaultBookmarks, size = "+size);
TypedArray preloads = res.obtainTypedArray(R.array.bookmark_preloads);
try {
String parent = Long.toString(parentId);
String now = Long.toString(System.currentTimeMillis());
for (int i = 0; i < size; i = i + 2) {
CharSequence bookmarkDestination = replaceSystemPropertyInString(getContext(),
bookmarks[i + 1]);
Log.d("antoon", TAG+", "+bookmarks[i]+"--"+bookmarkDestination);
db.execSQL("INSERT INTO bookmarks (" +
Bookmarks.TITLE + ", " +
Bookmarks.URL + ", " +
Bookmarks.IS_FOLDER + "," +
Bookmarks.PARENT + "," +
Bookmarks.POSITION + "," +
Bookmarks.DATE_CREATED + ","+
BrowserUtils.Bookmarks_VISITES + "," +
BrowserUtils.Bookmarks_DATE_LAST_VISITED +
") VALUES (" +
"'" + bookmarks[i] + "', " +
"'" + bookmarkDestination + "', " +
"0," +
parent + "," +
Integer.toString(i) + "," +
now + "," +
"0," +
now +
");");
/*插入res/raw/中的图片与书签匹配显示,注释掉避免图片不匹配,使用默认图片。
int faviconId = preloads.getResourceId(i, 0);
int thumbId = preloads.getResourceId(i + 1, 0);
byte[] thumb = null, favicon = null;
try {
thumb = readRaw(res, thumbId);
} catch (IOException e) {
}
try {
favicon = readRaw(res, faviconId);
} catch (IOException e) {
}
Log.i("antoon", TAG+", faviconId = "+faviconId+", thumbId = "+thumbId);
Log.i("antoon", TAG+", thumb = "+thumb+", favicon = "+favicon); if (thumb != null || favicon != null) {
ContentValues imageValues = new ContentValues();
imageValues.put(Images.URL, bookmarkDestination.toString());
if (favicon != null) {
imageValues.put(Images.FAVICON, favicon);
}
if (thumb != null) {
imageValues.put(Images.THUMBNAIL, thumb);
}
db.insert(TABLE_IMAGES, Images.FAVICON, imageValues);
}
*/
}
} catch (ArrayIndexOutOfBoundsException e) {
} finally {
preloads.recycle();
}
}


需要了解一下ContentProvider加载流程。参考 http://www.cnblogs.com/linjiqin/archive/2011/05/28/2061396.html

Browser默认书签加载过程的更多相关文章

  1. linux内核启动以及文件系统的加载过程

    Linux 内核启动及文件系统加载过程 当u-boot 开始执行 bootcmd 命令,就进入 Linux 内核启动阶段.普通 Linux 内核的启动过程也可以分为两个阶段.本文以项目中使用的 lin ...

  2. ClassLoad的加载过程及分析

    -Xbootclasspath:bootclasspath 让jvm从指定路径(可以是分号分隔的目录.jar.或者zip)中加载bootclass,用来替换jdk的rt.jar:若非必要,一般不会用到 ...

  3. Inside Flask - flask 扩展加载过程

    Inside Flask - flask 扩展加载过程 flask 扩展(插件)通常是以 flask_<扩展名字> 为扩展的 python 包名,而使用时,可用 import flask. ...

  4. 你所不知道的SQL Server数据库启动过程(用户数据库加载过程的疑难杂症)

    前言 本篇主要是上一篇文章的补充篇,上一篇我们介绍了SQL Server服务启动过程所遇到的一些问题和解决方法,可点击查看,我们此篇主要介绍的是SQL Server启动过程中关于用户数据库加载的流程, ...

  5. ThinkPHP3.2 加载过程(四)

    前言: 由于比较懒散,但是又是有点强迫症,所以还是想继续把ThinkPHP3.2的加载过程这个烂尾楼补充完整. ========================================分割线= ...

  6. ThinkPHP3.2 加载过程(一)

    加载过程(官方介绍) : 用户URL请求 调用应用入口文件(通常是网站的index.php) 载入框架入口文件(ThinkPHP.php) 记录初始运行时间和内存开销 系统常量判断及定义 载入框架引导 ...

  7. 2、手把手教你Extjs5(二)项目中文件的加载过程

    上一节中用sencha工具自动创建了一个项目,并且可以在浏览器中查看.现在我们来看看js类加载过程.如下图所示: 1、首先:浏览器中输入 localhost:1841 ,调用 index.html; ...

  8. (转)JVM类生命周期概述:加载时机与加载过程

    原文地址: http://blog.csdn.net/justloveyou_/article/details/72466105 JVM类加载机制主要包括两个问题:类加载的时机与步骤 和 类加载的方式 ...

  9. java中类的加载过程和对象的创建过程

    1.类加载过程 首先,jvm在执行时,遇到一个新的类,会先去内存的方法区中去寻找该类的.class文件,如果找到了就直接运行,如果没有找到,则会去硬盘中去寻找该类的.class文件,并将该类文件加载到 ...

随机推荐

  1. JAVA_Java常用核心包(概念)

    20150802 Created By BaoXinjian

  2. ADF_ManagedBean的概念和管理(概念)

    20150623 Created By BaoXinjian

  3. finder的隐藏文件&IOS虚拟机地址

    在终端里输入下面命令即可让它们显示出来. defaults write com.apple.finder AppleShowAllFiles -bool true   如果想恢复隐藏,可以用这个命令: ...

  4. 51. Word Search

    Word Search Given a 2D board and a word, find if the word exists in the grid. The word can be constr ...

  5. 智能指针 ADO数据库连接

    ADO库包含三个基本接口:_ConnectionPtr接口._CommandPtr接口和_RecordsetPtr接口._ConnectionPtr接口返回一个记录集或一个空指针.通常使用它来创建一个 ...

  6. AngularJs 简单实现全选,多选操作

    很多时候我们在处理CURD(增删改查)的时候需要实现批量操作数据,这时候就必须使用多选操作. Angular 中实现如下(当然还有很多种比笔者写的更好的方法,这里只是简单的实现.) demo 演示地址 ...

  7. css3颜色

    镂空字的2种做法

  8. make file

    CPPUTEST_USE_EXTENSIONS = Y如果没有这一句定义,CppUTestExt/MockSupport.h和CppUTestExt/MockSupport_c.h文件中的定义就不能用 ...

  9. 7.Mybatis关联表查询(这里主要讲的是一对一和一对多的关联查询)

    在Mybatis中的管理表查询这里主要介绍的是一对一和一对多的关联查询的resultMap的管理配置查询,当然你也可以用包装类来实现.不过这里不说,做关联查询的步骤可以简单的总结为以下的几步: 1.分 ...

  10. php 文件读取

    整理了一下PHP中读取文件的几个方法,方便以后查阅. 1.fread string fread ( int $handle , int $length ) fread() 从 handle 指向的文件 ...