在res/xml文件夹下面default_workspace创建一个资源文件,格式如下:
<?xml version="1.0" encoding="utf-8"?><favorites xmlns:launcher="http://schemas.android.com/apk/res/com.android.launcher"><favoritelauncher:packageName="tv.tur"launcher:className="tv.tur.HomeActivity"launcher:screen="3"launcher:x="0"launcher:y="0" /></favorites>
在launcher中的LauncherProvider的DatabaseHelper数据库类中的onCreate方法中进行初始化
代码如下:
if (!convertDatabase(db)) {// Populate favorites table with initial favoritesswitch (best_versions) {case 0:loadFavorites(db, R.xml.default_workspace);break;case 1:loadFavorites(db, R.xml.default_workspace_version_one);break;default:break;}}
在该loadFavorites中进行初始化:
private int loadFavorites(SQLiteDatabase db, int workspaceResourceId) {Intent intent = new Intent(Intent.ACTION_MAIN, null);intent.addCategory(Intent.CATEGORY_LAUNCHER);---------------...---------------//对应的是几个favorite的值TypedArray a = mContext.obtainStyledAttributes(attrs, R.styleable.Favorite);....String screen = a.getString(R.styleable.Favorite_screen);String x = a.getString(R.styleable.Favorite_x);String y = a.getString(R.styleable.Favorite_y);....values.clear();values.put(LauncherSettings.Favorites.CONTAINER, container);values.put(LauncherSettings.Favorites.SCREEN, screen);values.put(LauncherSettings.Favorites.CELLX, x);values.put(LauncherSettings.Favorites.CELLY, y);....if (TAG_FAVORITE.equals(name)) {long id = addAppShortcut(db, values, a, packageManager, intent);added = id >= 0;} else if (TAG_SEARCH.equals(name)) {added = addSearchWidget(db, values);} else if (TAG_CLOCK.equals(name)) {....}
在addAppShortcut里面进行添加快捷方式的信息到数据库如下:
private long addAppShortcut(SQLiteDatabase db, ContentValues values, TypedArray a,PackageManager packageManager, Intent intent) {long id = -1;ActivityInfo info;String packageName = a.getString(R.styleable.Favorite_packageName);String className = a.getString(R.styleable.Favorite_className);try {ComponentName cn;try {cn = new ComponentName(packageName, className);info = packageManager.getActivityInfo(cn, 0);} catch (PackageManager.NameNotFoundException nnfe) {String[] packages = packageManager.currentToCanonicalPackageNames(new String[] { packageName });cn = new ComponentName(packages[0], className);info = packageManager.getActivityInfo(cn, 0);}id = generateNewId();intent.setComponent(cn);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);values.put(Favorites.INTENT, intent.toUri(0));values.put(Favorites.TITLE, info.loadLabel(packageManager).toString());values.put(Favorites.ITEM_TYPE, Favorites.ITEM_TYPE_APPLICATION);values.put(Favorites.SPANX, 1);values.put(Favorites.SPANY, 1);values.put(Favorites._ID, generateNewId());if (dbInsertAndCheck(this, db, TABLE_FAVORITES, null, values) < 0) {return -1;}} catch (PackageManager.NameNotFoundException e) {Log.w(TAG, "Unable to add favorite: " + packageName +"/" + className, e);}return id;}
4347

被折叠的 条评论
为什么被折叠?



