Android M shortcut install / remove duplication

I am trying to create a shortcut for my application through a service. The following code is working on SDK <= 21, but it is not working correctly onSDK = 23

Create a shortcut as follows:

        Intent shortcutIntent = new Intent(this, MainActivity.class);
        shortcutIntent.putExtra(EXTRA_SHORTCUT_CLICKED, true); //This is only to check when the user clicked on the created shortcut
        shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);

        Intent addIntent = new Intent();
        addIntent.putExtra("duplicate", false);
        addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
        addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "TEST");
        addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(context, R.drawable.application_icon));
        addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);

        sendBroadcast(addIntent);

The SDK <= 21shortcut is created and if it already exists, it will not create another copy.

The SDK = 23shortcut will only be duplicated if I press the created shorcut and try to create the shortcut again, or if I reboot the device, and then try to create the shortcut again.

I tried to remove the shortcut first, but without success on SDK 23, as shown below:

        Intent shortcutIntent = new Intent(this, MainActivity.class);
        shortcutIntent.putExtra(EXTRA_SHORTCUT_CLICKED, true); //This is only to check when the user clicked on the created shortcut
        shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);

        Intent addIntent = new Intent();
        addIntent.putExtra("duplicate", false);
        addIntent.setAction("com.android.launcher.action.UNINSTALL_SHORTCUT");
        addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "TEST");
        addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(context, R.drawable.application_icon));
        addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);

        sendBroadcast(addIntent);

This is a service implementation:

public class MyService extends Service {

 @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        createShortcut(); //This is where I create the shortcut
        return super.onStartCommand(intent,flags,startId);
    }
}

Has Android 6 been changed by a shortcut policy? I can not find anything in the documentation.

[ UPDATE] , , . Shorcut , , . .

[ UPDATE2] grep- google Launcher3, , registerSessionCallback, . , ?

+4
2

, :

Google Uninstall Launcher3 Google Launcher Android M.

, Android M (MRA58K) .

, https://code.google.com/p/android/issues/detail?id=179697

[ ] Google .

+5

, . Google , , , .;)

+2

Source: https://habr.com/ru/post/1610929/


All Articles