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. 【javascript基础】3、变量和作用域

    前言 这篇和大家说一下javascript中的变量和作用域,由于是将基础嘛,主要给大家捋一下知识,不想翻开书复习的道友可以看一下,打算刚开始学习javascript的同学可以扫一眼. PS:jQuer ...

  2. 甲状腺癌怎样早发现 可B超检查

    2013-12-13 14:40:00.0 本文来源:人民网 点击参与跟帖 原标题:健康之道:甲状腺癌怎样早发现 摘要:甲状腺癌怎样早发现呢?隐早期以甲状腺结节的方式存在,且以匿方式生长,可能在人们偶 ...

  3. Javascript 基础知识学习--javascript中的参数传递都是按值传递的

    ECMAScript中所有函数的参数传递都是按值传递的,无论参数是值类型还是引用类型的.过去我跟大多数人一样觉得跟传值类型相关. 自己写了一个测试的例子,确实如此 function add(a) { ...

  4. cocos2dx loading界面 预加载资源 与 资源释放

    预加载图片: 1.CCTextureCache::sharedTextureCache()->addImage("icon.png"); 2.CCTextureCache:: ...

  5. Aquarium Filtration

    http://www.fishyou.com/aquarium-filtration.php Aquarium Filtration This section covers aquarium filt ...

  6. JAVA 多线程和并发学习笔记(一)

    一.进程与线程 1. 进程 当一个程序进入内存运行时,即变成一个进程.进程是处于运行过程中的程序.进程是操作系统进行资源分配和调度的一个独立单位.进程的三个特征: 独立性 独立存在的实体,每个进程都有 ...

  7. NoSQL数据库探讨之一 - 为什么要用非关系数据库?

    随着互联网web2.0网站的兴起,非关系型的数据库现在成了一个极其热门的新领域,非关系数据库产品的发展非常迅速.而传统的关系数据库在应付 web2.0网站,特别是超大规模和高并发的SNS类型的web2 ...

  8. Spring:No bean named 'beanScope' is defined

    初学Spring,“No bean named 'beanScope' is defined”这个问题困扰了我好几个小时,查资料无果后,重写好几遍代码后发现问题居然是配置文件不能放在包里...要放在s ...

  9. python序列化: json & pickle & shelve 模块

    一.json & pickle & shelve 模块 json,用于字符串 和 python数据类型间进行转换pickle,用于python特有的类型 和 python的数据类型间进 ...

  10. linux mono环境

    安装好 CentOS 6.5 之后 1.更新系统 在命令行下执行 yum –y update 2.安装必要的软件 yum -y install gcc gcc-c++ bison pkgconfig ...