61 votes

Android crée des raccourcis sur l'écran d'accueil

Ce que je veux faire, c'est :

1) Je suis dans une activité, il y a 2 boutons. Si je clique sur le premier, un raccourci est créé sur mon écran d'accueil. Le raccourci ouvre une html Je veux donc qu'il utilise le navigateur par défaut mais je ne veux pas utiliser Internet car j'ai déjà la page.

2)Le deuxième bouton crée un autre raccourci qui démarre une activité. Et je veux passer à l'activité des arguments supplémentaires (comme des chaînes de caractères par exemple). ...........

Ces choses sont-elles possibles ? J'ai trouvé quelques liens et des questions similaires comme Android : Existe-t-il une méthode de programmation permettant de créer un raccourci web sur l'écran d'accueil ?

Ils semblent être la réponse à ma question mais quelqu'un m'a dit que ce code ne va pas fonctionner sur tous les appareils et qu'il est déprécié et que ce que je veux faire n'est pas possible........

Cette technique n'est pas recommandée. Il s'agit d'une implémentation interne, qui ne fait pas partie du SDK Android. Elle ne fonctionnera pas sur toutes les implémentations de l'écran d'accueil. Elle peut ne pas fonctionner sur toutes les versions antérieures d'Android. Elle peut ne pas fonctionner dans les futures versions d'Android, car Google n'est pas obligé de maintenir les interfaces internes non documentées. Veuillez ne pas utiliser cette

Que signifie "mise en œuvre interne" ? Ce code est-il fiable ou non ? .....help me pls.....

6 votes

Vous devriez accepter quelques réponses. Les gens seront plus enclins à vous aider.

1 votes

On dirait que ce n'est plus autorisé : " Les apps et leurs publicités ne doivent pas modifier ou ajouter des paramètres de navigateur ou des signets, ajouter des raccourcis d'écran d'accueil ou des icônes sur l'appareil de l'utilisateur en tant que service à des tiers ou à des fins publicitaires. " mais je ne suis pas sûr, à cause de la dernière phrase. (d'après la nouvelle politique : play.google.fr/intl/fr/about/developer-content-policy.html )

86voto

antlersoft Points 10046

Le code d'exemple utilise des interfaces non documentées (permission et intention) pour installer un raccourci. Comme "quelqu'un" vous l'a dit, il se peut que cela ne fonctionne pas sur tous les téléphones et qu'il y ait des problèmes dans les futures versions d'Android. Ne le faites pas.

La bonne méthode consiste à écouter une demande de raccourci à partir de l'écran d'accueil - avec un filtre d'intention comme celui-ci dans votre manifeste :

<activity android:name=".ShortCutActivity" android:label="@string/shortcut_label">
  <intent-filter>
    <action android:name="android.intent.action.CREATE_SHORTCUT" />
    <category android:name="android.intent.category.DEFAULT" />
  </intent-filter>
</activity>

Ensuite, dans l'activité qui reçoit l'intention, vous créez une intention pour votre raccourci et vous la renvoyez comme résultat de l'activité.

// create shortcut if requested
ShortcutIconResource icon =
    Intent.ShortcutIconResource.fromContext(this, R.drawable.icon);

Intent intent = new Intent();

Intent launchIntent = new Intent(this,ActivityToLaunch.class);

intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, launchIntent);
intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, someNickname());
intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon);

setResult(RESULT_OK, intent);

1 votes

La permission et l'intention sont-elles sans document ? Ce que vous voulez dire, c'est qu'il y a beaucoup de choses sur l'intention dans la documentation, et vous utilisez l'intention aussi, quelle est la différence ? amyway, tnx beaucoup, juste une chose disons que mon application est appelée "Myapplication" je dois ajouter la permission dans son manifeste et la deuxième partie dans l'activité montrant les 2 boutons pour créer des raccourcis. ...mais ce que vous voulez dire par "La bonne façon est d'écouter une demande de raccourci de l'écran d'accueil - avec un filtre d'intention comme ceci dans votre manifeste :" Comment et quand l'écran d'accueil demande un raccourci ? Mon application le fait.....

5 votes

@user280560 -- Toutes les applications utiliseront les permissions et les intents ; c'est juste que certaines permissions et intents ne sont pas documentés - Android les utilise pour son implémentation interne (puisque le code source est public, il est facile de les trouver), mais vous ne devriez pas le faire dans une application tierce - parce que comme ils ne sont pas documentés, ils peuvent changer sans préavis.

1 votes

J'ai essayé votre code, il ne fait pas ce que je veux, mais celui du lien que j'ai posté le fait........ Voici ce que fait votre code : si j'appuie longuement sur l'écran d'accueil et que je sélectionne les raccourcis, mon MARCHE est affiché dans la liste, et si je le sélectionne, une intention est lancée (mais aucun raccourci n'est créé sur le bureau). Ce que je veux, c'est que lorsque je suis à l'intérieur de mon marché et que je clique sur un bouton, un raccourci avec une icône est ajouté sur l'écran d'accueil. addIntent.setAction("com.Android.launcher.action.INSTALL_SHORTCUT") ; this.sendBroadcast(addIntent) ; ces 2 lignes font la différence, qu'est-ce qui ne va pas avec elles ?

68voto

Siddiq Abu Bakkar Points 1224

J'ai développé une méthode ci-dessous pour créer l'icône de raccourci sur l'écran d'accueil d'Android [Testé sur ma propre application]. Il suffit de l'appeler.

private void ShortcutIcon(){

    Intent shortcutIntent = new Intent(getApplicationContext(), MainActivity.class);
    shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

    Intent addIntent = new Intent();
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "Test");
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(getApplicationContext(), R.drawable.ic_launcher));
    addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
    getApplicationContext().sendBroadcast(addIntent);
}

N'oubliez pas de modifier le nom de votre activité, l'icône ressource et la permission.

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

Joyeux codage ! !!

Editar:

Pour le problème de duplication, la première option est d'ajouter la ligne ci-dessous dans le code, sinon il en crée un nouveau à chaque fois.

addIntent.putExtra("duplicate", false);

La deuxième option consiste à désinstaller d'abord l'icône de raccourci de l'application, puis à l'installer à nouveau si la première option n'a pas fonctionné.

2 votes

Cette solution semble être plus simple que la solution acceptée. Et elle a fonctionné dans mon cas.

23 votes

Ajouter addIntent.putExtra("duplicate", false); sinon il en crée un nouveau à chaque fois.

1 votes

@PratikButani duplicate not working in kitkat..will you help me in this

20voto

Q Locker Points 744

La diffusion com.Android.launcher.action.INSTALL_SHORTCUT n'a plus aucun effet depuis Android oreo. LIEN

Si vous souhaitez prendre en charge toutes les versions d'Android, notamment Android 8.0 ou oreo et plus récent utilisez le code ci-dessous pour créer un raccourci :

public static void addShortcutToHomeScreen(Context context)
{
    if (ShortcutManagerCompat.isRequestPinShortcutSupported(context))
    {
        ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(context, "#1")
                .setIntent(new Intent(context, YourActivity.class).setAction(Intent.ACTION_MAIN)) // !!! intent's action must be set on oreo
                .setShortLabel("Test")
                .setIcon(IconCompat.createWithResource(context, R.drawable.ic_launcher))
                .build();
        ShortcutManagerCompat.requestPinShortcut(context, shortcutInfo, null);
    }
    else
    {
        // Shortcut is not supported by your launcher
    }
}

Ajouter une permission dans le fichier manifeste :

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

11voto

android developer Points 20939

À partir d'Android O, c'est la façon de créer un raccourci :

if (ShortcutManagerCompat.isRequestPinShortcutSupported(context)) {
    final ShortcutManager shortcutManager = getSystemService(ShortcutManager.class);

    ShortcutInfo pinShortcutInfo = new ShortcutInfo.Builder(context, shortcutId)
            .setIcon(Icon.createWithResource(context, R.mipmap.ic_launcher))
            .setShortLabel(label)
            .setIntent(new Intent(context, MainActivity.class).setAction(Intent.ACTION_MAIN))
            .build();
    shortcutManager.requestPinShortcut(pinShortcutInfo, null);
}

Il a beaucoup de limites, malheureusement :

  1. Demande à l'utilisateur d'accepter de l'ajouter.
  2. Ne peut pas être ajouté/supprimé en arrière-plan.
  3. Ne sera pas supprimé si l'application ciblée est supprimée. Seulement celle qui l'a créée.
  4. Il n'est pas possible de créer l'icône à partir d'une ressource de l'application ciblée, sauf s'il s'agit de l'application en cours. Vous pouvez cependant le faire à partir d'un bitmap.

Pour les versions antérieures à Android O, vous pouvez également utiliser ShortcutManagerCompat pour créer de nouveaux raccourcis, sans aucune de ces limitations.

8voto

wzbozon Points 2851

J'ai amélioré un peu la solution ci-dessus. Maintenant il enregistre dans les préférences si un raccourci a déjà été ajouté et ne l'ajoute pas dans les nouveaux lancements d'une application si l'utilisateur l'a supprimé. Cela permet aussi de gagner un peu de temps, puisque le code pour ajouter un raccourci existant n'est plus exécuté.

final static public String PREFS_NAME = "PREFS_NAME";
final static private String PREF_KEY_SHORTCUT_ADDED = "PREF_KEY_SHORTCUT_ADDED";

// Creates shortcut on Android widget screen
private void createShortcutIcon(){

    // Checking if ShortCut was already added
    SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
    boolean shortCutWasAlreadyAdded = sharedPreferences.getBoolean(PREF_KEY_SHORTCUT_ADDED, false);
    if (shortCutWasAlreadyAdded) return;

    Intent shortcutIntent = new Intent(getApplicationContext(), IntroActivity.class);
    shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

    Intent addIntent = new Intent();
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "YourAppName");
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(getApplicationContext(), R.drawable.ic_launcher));
    addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
    getApplicationContext().sendBroadcast(addIntent);

    // Remembering that ShortCut was already added
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putBoolean(PREF_KEY_SHORTCUT_ADDED, true);
    editor.commit();
}

0 votes

Ajoutera-t-il un raccourci avant d'ouvrir l'application. Comment ce code s'exécutera sans ouvrir une activité d'une application qui vient d'être installée.

0 votes

L'utilisation de préférences partagées semble être la solution idéale. Les autres tentatives de désinstaller y réinstaller o Ajout d'un supplément avec "duplicate, false". ne fonctionnent pas sur la plupart des appareils.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X