Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create dynamic app shortcut using ShortcutManager API for android 7.1 app?

In Android 7.1, developer can able to create AppShortCut.

We can create shortcut in two way:

  1. Static shortcuts using resources(XML) file.
  2. Dynamic shortcuts using ShortcutManager API.

So How to create a shortcut using ShortcutManager dynamically?

like image 478
pRaNaY Avatar asked Nov 06 '16 06:11

pRaNaY


People also ask

What is ShortcutManager API?

The ShortcutManager API lets you store and manage keyboard shortcut contexts ( ShortcutContext ). Each ShortcutManager object: Stores and manages its own set of keyboard shortcut contexts. Listens to the KeyboardEvent events and runs actions for them.


2 Answers

Using ShortcutManager, we can create app dynamic app shortcut in following way:

ShortcutManager shortcutManager;
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
        shortcutManager = getSystemService(ShortcutManager.class);
        ShortcutInfo shortcut;
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N_MR1) {
            shortcut = new ShortcutInfo.Builder(this, "second_shortcut")
                    .setShortLabel(getString(R.string.str_shortcut_two))
                    .setLongLabel(getString(R.string.str_shortcut_two_desc))
                    .setIcon(Icon.createWithResource(this, R.mipmap.ic_launcher))
                    .setIntent(new Intent(Intent.ACTION_VIEW,
                            Uri.parse("https://www.google.co.in")))
                    .build();
            shortcutManager.setDynamicShortcuts(Arrays.asList(shortcut));
        }


    }

String resources:

<string name="str_shortcut_two">Shortcut 2</string>
<string name="str_shortcut_two_desc">Shortcut using code</string>

Developer can also perform different tasks app shortcut using ShortcutManager:

  • Publish: Use setDynamicShortcuts(List) to redefine the entire list of dynamic shortcuts, or use addDynamicShortcuts(List) to augment an existing list of dynamic shortcuts.
  • Update: Use the updateShortcuts(List) method.
  • Remove: Remove a set of dynamic shortcuts using removeDynamicShortcuts(List), or remove all dynamic shortcuts using removeAllDynamicShortcuts().

App Shortcut

Check Github example for App Shortcut

Check https://developer.android.com/preview/shortcuts.html and ShortcutManager to get more info.

like image 154
pRaNaY Avatar answered Oct 13 '22 04:10

pRaNaY


Perfect Solution for all devices (Pre/Post Oreo device).

createShortcut(CurrentActivity.this, ActivityToOpen.class, "app name", R.mipmap.ic_launcher);

Put this in your Util.

 public static void createShortcut(@NonNull Activity activity, Class activityToOpen, String title, @DrawableRes int icon) {
        Intent shortcutIntent = new Intent(activity, activityToOpen);
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { // code for adding shortcut on pre oreo device 
            Intent intent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
            intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
            intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, title);
            intent.putExtra("duplicate", false);
            Parcelable parcelable = Intent.ShortcutIconResource.fromContext(activity, icon);
            intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, parcelable);
            activity.sendBroadcast(intent);
            System.out.println("added_to_homescreen");
        } else { 
            ShortcutManager shortcutManager = activity.getSystemService(ShortcutManager.class);
            assert shortcutManager != null;
            if (shortcutManager.isRequestPinShortcutSupported()) {
                ShortcutInfo pinShortcutInfo =
                        new ShortcutInfo.Builder(activity, "browser-shortcut-")
                                .setIntent(shortcutIntent)
                                .setIcon(Icon.createWithResource(activity, icon))
                                .setShortLabel(title)
                                .build();

                shortcutManager.requestPinShortcut(pinShortcutInfo, null);
                System.out.println("added_to_homescreen");
            } else {
                System.out.println("failed_to_add");
            }
        }
    }
like image 23
Khemraj Sharma Avatar answered Oct 13 '22 03:10

Khemraj Sharma