Android开发之修改Chrome书签

Android系统中预置了Chrome apk,只是一个chrome apk,没有源代码,那么客户希望可以根据sim卡来定制书签的需求应该如何实现呢?
Chrome向想修改bookmark的厂商提供PartnerBookmarksProvider apk,用户可以修改PartnerBookmarksProvider来向Chrome中添加书签。

原理:
Chrome的书签来自bookmarks.db,而db的数据库来自PartnerBookmarksProvider 的xml文件中的字符串,根据这个原理,就可以实现上面的客制化了
首先找到PartnerBookmarksProvider\res\values\strings.xml

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <string name="bookmarks_folder_name" translatable="false">Partner Bookmarksstring>
    <string-array name="bookmarks">
    string-array>

    <string-array name="bookmarks2">
        <item>书签名1item>
        <item>http://www.sina.com.cnitem>

        <item>书签名2item>
        <item>http://baidu.comitem>
    string-array>
resources>

其中

    <string-array name="bookmarks">
    string-array>

数组就代表了一系列书签,上面这个代表没有书签,bookmarks2则代表有2个书签。这些bookmarks就是数据库的读取内容
接下来是根据sim卡,让数据库读取不同的书签

public void ChangeBookmarkBySimcard(){
        int mcc = getContext().getResources().getConfiguration().mcc;
        int mnc = getContext().getResources().getConfiguration().mnc;
        Log.v(TAG,"mcc"+mcc);
        Log.v(TAG,"mnc"+mnc);
        if (228 == mcc && 01 == mnc) {
            bookmarks_new = getContext().getResources().getTextArray(R.array.bookmarks2);
        } else {
            bookmarks_new = getContext().getResources().getTextArray(R.array.bookmarks);
        }
        for (int i = 0; i < bookmarks_new.length; i++) {
            Log.v(TAG, "query bookmarks new:" + bookmarks_new[i]);
        }

        final SQLiteDatabase db = mOpenHelper.getWritableDatabase();
        mOpenHelper.dropTable(db);
        mOpenHelper.createTable(db);
        mOpenHelper.createDefaultBookmarks(db);
    }

当然,只是替换书签并没有用,要删除数据库重新生成数据库和数据才行。之后就剩下在合适的时机调用该方法了,我是在query数据库之前调用的。

源代码:
http://download.csdn.net/download/u011109881/10150380

你可能感兴趣的:(Android)