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. Hbase条件筛选

    需求来自于,模糊查找当天的所有记录,并查找对应列的记录数 public static void main(String[] args) throws Exception{ //创建HBase连接 Co ...

  2. mybatis配置优化

    1.加入日志log4j 1)加入jar包:log4j-1.2.17.jar 2)加入log4j配置文件: 可以使properties或者xml形式 log4j.rootLogger = DEBUG,C ...

  3. delphi 调用c#dll

    public interface iProduct { string Buy(); } [ClassInterface(ClassInterfaceType.None)] public class P ...

  4. (转)SQLServer_T-SQL 语句执行时间的查询

    原文地址:http://blog.csdn.net/wangjunhe/article/details/7211974 --利用getdatedeclare @beginTime datetime d ...

  5. JAVA设计模式之门面模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述门面(Facade)模式的: 门面模式是对象的结构模式,外部与一个子系统的通信必须通过一个统一的门面对象进行.门面模式提供一个高层次的接口 ...

  6. COOKIE&&SESSION

    ---------------------------------------------------------------------------COOKIE------------------- ...

  7. ARCGIS对谷歌影像进行投影转换

    相信有不少同学会有这样的困扰,通过软件下载的谷歌遥感影像,直接用ARCGIS等专业软件打开之后发现,遥感影像有拉伸的情况,这是什么原因呢.那是因为,通过软件下载下来的遥感影像的投影信息包含的是经纬度信 ...

  8. Centos下MySQL使用总结

    转载于CentOS中文站:http://www.centoscn.com/CentOS/Intermediate/2013/0817/1334.html 一.MySQL安装 Centos下安装mysq ...

  9. 为图片添加九宫格信息-UI界面编辑器(SkinStudio)教程

    1.1.   为图片添加九宫格信息 在UI编辑器中添加一张图片 使用Photoshop打开这张图片 放大这张图片,使用切片工具,选取LeftTop(左上角固定不变的位置) 双击切片,找到尺寸信息 将尺 ...

  10. 使用timer控件控制进度条

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...