2016-11-01 177 views
0

我的Android 7.1.1新快捷方式存在一些問題。Android動態快捷方式圖標

第二個drawable沒有資源ID。這裏是圖片和代碼片段。

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

Nope已經嘗試我有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旨在用於檢查當前發佈的哪些快捷方式是 。 通過API (如setDynamicShortcuts(List))重新發布返回的ShortcutInfos可能會導致信息丟失如 作爲圖標。

上述片段爲getDynamicShortcuts功能developer.android.com的描述。

所以,它能夠更好地使用API​​僅僅爲驗證或檢索的細節,而不是把它放回ShortcutManager

對於進一步的細節,https://developer.android.com/reference/android/content/pm/ShortcutManager.html#getDynamicShortcuts()