2016-11-01 12 views
0

У меня есть некоторые проблемы с новыми ярлыками с Android 7.1.1.Иконки динамических ярлыков Android

Вторая вытачиваемая не имеет идентификатора ресурса. Вот и изображение, и фрагмент кода.

enter image description here

private void createShortcuts(String deviceValue, String tablequery, int pos, String devImage, int index) { 
    ShortcutManager shortcutManager = mActivity.getSystemService(ShortcutManager.class); 

    if (index == 0) { 

     List<ShortcutInfo> scInfo = shortcutManager.getDynamicShortcuts(); 

     Bundle b = new Bundle(); 
     b.putInt("position", pos); 
     b.putString("table", tablequery); 
     b.putString("device", devImage); 

     String add = deviceValue + "_" + tablequery; 
     ShortcutInfo shortcut = new ShortcutInfo.Builder(mActivity, add) 
        .setShortLabel(deviceValue) // Shortcut Icon tab 
        .setLongLabel(deviceValue) // Displayed When Long Pressing On App Icon 
        .setIcon(Icon.createWithResource(mActivity, R.drawable.ic_shortcut_phone)) 
        .setIntents(new Intent[]{ 
          new Intent(Intent.ACTION_MAIN, Uri.EMPTY, mActivity, MainActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK), 
          new Intent(Intent.ACTION_DEFAULT, Uri.EMPTY, mActivity, Device_Detail_Activity.class).putExtras(b) 
        }) 
        .build(); 

     scInfo.add(shortcut); 

     shortcutManager.setDynamicShortcuts(scInfo); 
    } else if (index == 1) { 
     String remove = deviceValue + "_" + tablequery; 
     shortcutManager.removeDynamicShortcuts(Arrays.asList(remove)); 
    } 
} 

Что я делаю неправильно?

+1

У вас есть три ярлыки приложений в Скриншот. Ваш код жестко связан, чтобы всегда использовать один и тот же ресурс. Итак, ваш первый и третий ярлыки приложений должны иметь один и тот же значок ... но они этого не делают, не говоря уже о проблеме со вторым. Если вы изменили свое приложение и у вас были выдающиеся ярлыки динамических приложений, вы можете удалить и переустановить приложение или иным образом заставить свой код перестроить все эти ярлыки динамических приложений и посмотреть, поможет ли это. – CommonsWare

+0

Нет, я уже попробовал, у меня есть 2 динамика и один статический ярлык –

ответ

2

Теперь я нашел обходной путь, но я надеюсь, что они будут фиксированным его в следующем API Обновления

Вот отрезали выглядит не очень хорошо, но это работает:

private void createShortcuts(String deviceValue, String tablequery, int pos, String devImage, int index) { 
    ShortcutManager shortcutManager = mActivity.getSystemService(ShortcutManager.class); 
    List<ShortcutInfo> scInfo = shortcutManager.getDynamicShortcuts(); 

    if (index == 0) { 

     Bundle b = new Bundle(); 
     b.putInt("position", pos); 
     b.putString("table", tablequery); 
     b.putString("device", devImage); 

     String add = deviceValue + "_" + tablequery; 

     if (scInfo.size() == 1) { 
      ShortcutInfo webShortcut = null, webShortcut1 = null; 

      webShortcut = new ShortcutInfo.Builder(mActivity, scInfo.get(0).getId()) 
        .setShortLabel(scInfo.get(0).getShortLabel()) 
        .setLongLabel(scInfo.get(0).getLongLabel()) 
        .setIcon(Icon.createWithResource(mActivity, R.drawable.ic_shortcut_phone)) 
        .setIntent(scInfo.get(0).getIntent()) 
        .build(); 

      webShortcut1 = new ShortcutInfo.Builder(mActivity, add) 
        .setShortLabel(deviceValue) // Shortcut Icon tab 
        .setLongLabel(deviceValue) // Displayed When Long Pressing On App Icon 
        .setIcon(Icon.createWithResource(mActivity, R.drawable.ic_shortcut_phone_2)) 
        .setIntents(new Intent[]{ 
          new Intent(Intent.ACTION_MAIN, Uri.EMPTY, mActivity, MainActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK), 
          new Intent(Intent.ACTION_DEFAULT, Uri.EMPTY, mActivity, Device_Detail_Activity.class).putExtras(b) 
        }) 
        .build(); 

      shortcutManager.setDynamicShortcuts(Arrays.asList(webShortcut, webShortcut1)); 
     } else { 
      ShortcutInfo webShortcut = new ShortcutInfo.Builder(mActivity, add) 
        .setShortLabel(deviceValue) // Shortcut Icon tab 
        .setLongLabel(deviceValue) // Displayed When Long Pressing On App Icon 
        .setIcon(Icon.createWithResource(mActivity, R.drawable.ic_shortcut_phone)) 
        .setIntents(new Intent[]{ 
          new Intent(Intent.ACTION_MAIN, Uri.EMPTY, mActivity, MainActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK), 
          new Intent(Intent.ACTION_DEFAULT, Uri.EMPTY, mActivity, Device_Detail_Activity.class).putExtras(b) 
        }) 
        .build(); 

      shortcutManager.setDynamicShortcuts(Arrays.asList(webShortcut)); 
     } 
    } else if (index == 1) { 
     String remove = deviceValue + "_" + tablequery; 
     shortcutManager.removeDynamicShortcuts(Arrays.asList(remove)); 
    } 
} 
0

getDynamicShortcuts

добавлен в уровень API 25 Список getDynamicShortcuts() Возвращает все динамические ярлыки из приложения-вызывающего.

Этот API предназначен для изучения того, какие ярлыки в настоящее время опубликованы. Повторная публикация возвращается ShortcutInfos через API , например setDynamicShortcuts (List), может привести к потере информации таких , что и иконки.

, приведенный выше фрагмент представляет собой описание для getDynamicShortcuts функции в developer.android.com.

Таким образом, его лучше использовать API только для проверки или для получения сведений и не устанавливать его обратно в ShortcutManager

Для, дополнительной информации, https://developer.android.com/reference/android/content/pm/ShortcutManager.html#getDynamicShortcuts()