Question

I want to create my app's shortcut/launcher icon on the homescreen as soon as I install my app (even before I start it). Is that possible? How might I do that?

Was it helpful?

Solution 3

NOTE: This answer is now wrong. See, for instance, Robin's answer for a way to do this.


As far as I know, an app cannot force itself onto the home screen. It gets added to the app list that the launcher app maintains, but the home screen is generally under user control. Giving apps the ability to clutter up the home screen would be an open invitation for abuse.

OTHER TIPS

Since ICS, you can do like this:

public void createShortCut(){
    Intent shortcutintent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
    shortcutintent.putExtra("duplicate", false);
    shortcutintent.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.shortcutname));
    Parcelable icon = Intent.ShortcutIconResource.fromContext(getApplicationContext(), R.drawable.icon);
    shortcutintent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon);
    shortcutintent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(getApplicationContext(), EnterActivity.class));
    sendBroadcast(shortcutintent);
}

Please also refer to the source code of launcher at: this link

Edit : If somebody would miss reading comment so adding following line.

This requires "com.android.launcher.permission.INSTALL_SHORTCUT" permission

You forgot to add permissions:

 <uses-permission
        android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
    <uses-permission
        android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />

Great tutorial here: http://androidforbegineers.blogspot.in/2014/01/android-home-screen-shortcut.html#!

If you install your application, neither your application, nor any services or other processes are active! Android want's the user to make the first step in "opening" the application. You are not able to install a shortcut directly! Thats the answer. Notice: On most devices the launcher will create a shortcut for your application itself.

Can you install shortcuts in runtime after the user has somehow started your app at least once? : yes (see Robins answer).

Is there a workaround? Maybe, but no good one.

Update, Another hint: If you have already an application on the device of the user. (For example if your second app that gets installed is the key for "going pro" or something), then you actually can start the second application from the first one, without the user has started the second app ever (and add a shortcut).

  1. Create function to call intent of shortcut:

    private void criarAtalho() {
        Intent shortcutIntent = new Intent(getApplicationContext(), SplashScreen.class);
        shortcutIntent.setAction(Intent.ACTION_MAIN);
        Intent addIntent = new Intent();
        addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
        addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "nomeDaApp");
        addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(getApplicationContext(), R.mipmap.ic_launcher));
    
        addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
        addIntent.putExtra("duplicate", false);  //may it's already there so don't duplicate
        getApplicationContext().sendBroadcast(addIntent);
    }
    
  2. write on OnCreat the call of function:

    if(!getSharedPreferences("APP_PREFERENCE", Activity.MODE_PRIVATE).getBoolean("IS_ICON_CREATED", false)){
        criarAtalho();
        getSharedPreferences("APP_PREFERENCE", Activity.MODE_PRIVATE).edit().putBoolean("IS_ICON_CREATED", true).commit();
    }
    
  3. set the permissions on manifest:

    <uses-permission
        android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
    

First, add permission for adding shortcut to manifest:

<uses-permission
    android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />

Then, call the function below.

public void createShortcut(){
    Intent intentShortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
    intentShortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name));
    Parcelable appicon = Intent.ShortcutIconResource.fromContext(getApplicationContext(), R.drawable.ic_launcher);
    intentShortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, appicon);
    intentShortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(getApplicationContext(), MainActivity.class));
    intentShortcut.putExtra("duplicate", false);
    sendBroadcast(intentShortcut);
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top