Utilizo estos métodos para agregar o quitar accesos directos correctamente. Estos métodos funcionan bastante bien y son los mismos que el sistema Android cuando el usuario agrega/elimina manualmente un atajo.
public static void addShortcut(Context context)
{
Intent shortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
ApplicationInfo appInfo = context.getApplicationInfo();
// Shortcut name
shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, appInfo.name);
shortcut.putExtra("duplicate", false); // Just create once
// Setup activity shoud be shortcut object
ComponentName component = new ComponentName(appInfo.packageName, appInfo.className);
shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(Intent.ACTION_MAIN).setComponent(component));
// Set shortcut icon
ShortcutIconResource iconResource = Intent.ShortcutIconResource.fromContext(context, appInfo.icon);
shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconResource);
context.sendBroadcast(shortcut);
}
public static void deleteShortcut(Context context)
{
Intent shortcut = new Intent("com.android.launcher.action.UNINSTALL_SHORTCUT");
ApplicationInfo appInfo = context.getApplicationInfo();
// Shortcut name
shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, appInfo.name);
ComponentName comp = new ComponentName(appInfo.packageName, appInfo.className);
shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(Intent.ACTION_MAIN).setComponent(comp));
context.sendBroadcast(shortcut);
}
Permisos:
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />
BroadcastReceiver:
<receiver android:name="YOUR.PACKAGE.PackageReplacedReceiver">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<data android:scheme="package" android:path="YOUR.PACKAGE" />
</intent-filter>
</receiver>
¿No cree que esto podría ser una mala práctica? Si el usuario quiere el ícono en su pantalla, pueden hacerlo ellos mismos muy fácilmente. – Jems
Esto es similar a las aplicaciones de Windows que inducen a la ira y que insisten en agregarse al escritorio en cada instalación/actualización/inicio. Incluso si encuentras una forma, * por favor no lo hagas *. – ZoogieZork
@Jems, ZoogieZork ambos son correctos, pero algunas situaciones requerirán esta funcionalidad, por ejemplo, una tienda de aplicaciones empresariales que solo está disponible para empleados en dispositivos propiedad de la compañía. Muchos de estos usuarios no tendrán el conocimiento para poner aplicaciones en la pantalla de inicio, pero tendrán una experiencia de usuario mucho mejor si lo hacemos por ellos. – Kennifer