Это возможно.
[ОБНОВЛЕНИЕ]: Начиная с Android M , они полностью удалили поддержку намерения UNINSTALL_SHORTCUT в AOSP Launcher3 и Google Now Launcher. В настоящее время нет альтернативы или замены для этого API.
Источник: https://code.google.com/p/android/issues/detail?id=179697
[ОБНОВЛЕНИЕ-2] : Может быть, это полезно для некоторых из вас. Мне удалось выяснить, как, по крайней мере, удалить моих приложений снимков с домашнего экрана. В то время как Google удалил поддержку удаления ярлыка, ярлык, указывающий на псевдоним активности, все равно будет удален, как только псевдоним будет отключен.
Маленькая ссылка:
ComponentName yourAlias = new ComponentName(getPackageName(), "org.example.yourAliasName");
if (show){
flag = PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
}else{
flag = PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
}
context.getPackageManager().setComponentEnabledSetting(yourAlias, flag, PackageManager.DONT_KILL_APP);
ниже Android M:
Перво-наперво, вот код, который я неоднократно смог удалить ярлык Facebook,
без любого корня (что аналогично коду оп, поэтому он был не неправильным):
Intent appIntent = new Intent(Intent.ACTION_MAIN);
appIntent.setComponent(new ComponentName("com.facebook.katana", "com.facebook.katana.LoginActivity"));
appIntent.addCategory(Intent.CATEGORY_LAUNCHER);
Intent addIntent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "Facebook");
addIntent.putExtra("duplicate", false);
addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, appIntent);
sendBroadcast(addIntent);
Важно то, что ваше намерение должно быть точно таким же, как и намерение, которое
был использован для создания ярлыка. Вы можете, если у вас есть root, взглянуть на
launcher.db и скопируйте URI.
Расположен в data/data/com.android.Launcher.launcher.db
Тем не менее, у вас нет доступа к Android Launcher.db
в любое время, так что это может быть попытка и ошибка.
Источники, которые я настоятельно рекомендую прочитать:
UninstallShortcutReceiver.java
очень хороший ответ от Dev-il на эту тему
В дополнение, код для извлечения всех приложений и их данных, которые в моем
Дело было достаточно, чтобы удалить большинство ярлыков.
PackageManager pManager = context.getPackageManager();
List<ResolveInfo> packageInfos = loadApps(context);
Отсюда вы можете перебирать список и получать необходимую информацию, например:
ActivityInfo activityInfo = packInfo.activityInfo;
- activityInfo.loadLabel (pManager) .toString ()
//name of the App
- activityInfo.loadIcon (pManager)
//Icon of the activity as drawable
- ActivityInfo.packageName
// packageName the activity belongs to
- activityInfo.name
//Launcher class name