为什么在安装新版本时不会更新应用程序快捷方式的图标?

时间:2015-10-24 12:51:28

标签: android icons updates shortcut android-launcher

背景

我有一个应用管理器应用(here),除其他功能外,还可以为启动器上的其他应用创建快捷方式。

问题

在安装这些应用的新版本时,我的应用创建的快捷方式似乎没有更新其图标。

我在多个设备和多个发射器上都注意到了它。 不仅如此,甚至游戏商店创建的图标都不会更新。

不仅如此,而且在某些发射器上,当尝试创建快捷方式时,如果已经存在快捷方式,则无法创建新的快捷方式。

我尝试了什么

我不仅通过普通应用程序测试了它,而且还通过我自己签名的APK,通过ADB和正常打开APK文件进行了测试(同时还确保版本增加。

有三种方法可以创建快捷方式,但是我在更新时都失败了:

  1. 添加带有图标res id的快捷方式:

    Intent shortcutIntent;
    shortcutIntent=new Intent();
    //    shortcutIntent.putExtra("duplicate",false);  //optional
    shortcutIntent.setClassName(packageName,fullPathToActivity);
    shortcutIntent.setAction(Intent.ACTION_MAIN);
    final Intent putShortCutIntent=new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
    putShortCutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT,shortcutIntent);
    putShortCutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME,title);
    Resources resources=pm.getResourcesForApplication(packageName);
    final Intent launchIntentForPackage=pm.getLaunchIntentForPackage(packageName);
    if(TextUtils.equals(launchIntentForPackage.getComponent().getClassName(),fullPathToActivity))
      iconRes=applicationInfo.icon;
    else
      iconRes=pm.getActivityInfo(new ComponentName(packageName,fullPathToActivity),0).icon;
    if(iconRes==0)
      iconRes=applicationInfo.icon;
    String iconResourceName=resources.getResourceName(iconRes);
    putShortCutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,iconRes);
    
  2. 与上述相同,但使用位图作为图标:

    ...
    Bitmap appIcon=...
    putShortCutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON,appIcon);
    
  3. 与上述相同,但改为使用ShortcutIconResource:

    ...
    ShortcutIconResource shortcutIconResource=new Intent.ShortcutIconResource();
    shortcutIconResource.packageName=packageName;
    shortcutIconResource.resourceName=iconResourceName;
    putShortCutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,shortcutIconResource);
    
  4. 问题

    为什么启动器不会更新我的快捷方式,而且其中一些(或全部)在从Play商店创建时甚至不更新?

    创建快捷方式的正确方法是什么,在更换/更新应用时会更新?

    另外,为什么大多数发射器会忽略添加快捷方式(如果它已经显示?)

0 个答案:

没有答案