需求是添加一个快捷应用图标,未下载的应用,点击图标开始下载
废话少说,上代码
首先是看 com.android.launcher3.LauncherModel
这个类里面有对launcher3.db做操作的地方:方法名称:loadWorkspace
launcher3逻辑还是有点复杂的,自己去看,代码只实现了标题
ContentValues valuesNew = new ContentValues();
long aLong = LauncherSettings.Settings.call(contentResolver, LauncherSettings.Settings.METHOD_NEW_ITEM_ID)
.getLong(LauncherSettings.Settings.EXTRA_VALUE);
valuesNew.put(LauncherSettings.Favorites._ID, aLong);//id号
valuesNew.put("title", "appg");
valuesNew.put("intent", "#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.baidu.searchbox/com.android.vending.AssetBrowserActivitya;end");//x坐标
valuesNew.put("container", -100);//窗口,workspace是-100
valuesNew.put("screen", "0");
valuesNew.put("cellX", 0);//x坐标
valuesNew.put("cellY", 0);//y坐标
valuesNew.put("spanX", 1);//x扩展
valuesNew.put("spanY", 1);//y扩展
valuesNew.put("itemType", 0);
valuesNew.put("appWidgetId", -1);
//图片
Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.ic_info_launcher);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream);
valuesNew.put("icon", byteArrayOutputStream.toByteArray());//x坐标
valuesNew.put("modified", 0);
valuesNew.put("restored", 0);
valuesNew.put("profileId", 0);
valuesNew.put("rank", 0);
valuesNew.put("options", 0);
contentResolver.insert(LauncherSettings.Favorites.CONTENT_URI, valuesNew);
contentResolver本有的数据库给它加一条数据 就好了。其中他做了很多判断(效验) 直接注掉他的代码就好了:一共两个地方判断1、launcherApps.isActivityEnabledForProfile 2、Missing activity found in getShortcutInfo: 这两个地方图片就显示出来了, 有这个需求应该很少,有问题私信就好了