Question

Ce que je veux faire est:

1) Je suis à l'intérieur d'une activité, il y a 2 boutons. Si je clique sur le premier un raccourci est créé dans mon écran d'accueil. Le raccourci ouvrir une page html qui a été précédemment téléchargé, donc je veux utiliser le navigateur par défaut, mais je ne veux pas utiliser Internet parce que je l'ai déjà la page.

2) Le second bouton créer un autre raccourci qui démarre une activité. Et je veux passer à l'activité des arguments supplémentaires (sous forme de chaînes, par exemple) ...........

sont ces choses possibles? J'ai trouvé un lien et des questions similaires comme Android: Est-il un moyen de programmation pour 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 travailler sur tous les appareils et est dépréciée et que ce que je veux faire est pas possible .......

Cette technique est déconseillée. Ceci est une mise en œuvre interne, ne fait pas partie du SDK Android. Il ne fonctionnera pas sur toutes les implémentations de l'écran d'accueil. Il ne fonctionne pas sur toutes les versions antérieures d'Android. Il peut ne pas fonctionner dans les versions futures d'Android, Google n'a pas l'obligation de maintenir des interfaces non documentées internes. S'il vous plaît ne pas utiliser ce

Qu'est-ce que signifie la mise en œuvre interne? Est-ce code trustable ou non ..... Aidez-moi svp .....

Était-ce utile?

La solution

Le code exemple utilise des interfaces non documentées (autorisation et intention) pour installer un raccourci. Comme « quelqu'un » vous a dit, cela ne peut pas fonctionner sur tous les téléphones, et peut se briser dans les prochaines versions Android. Ne pas le faire.

La bonne façon est d'écouter pour une demande de raccourci de la maison screen-- avec un filtre intention comme si 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 le retourner à la suite 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);

Autres conseils

J'ai développé une méthode ci-dessous pour créer l'icône de raccourci sur Android écran d'accueil [testé sur mon propre application]. appeler tout simplement.

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);
}

Ne pas oublier de changer le nom de votre activité, icône ressource et autorisation.

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

Bonne programmation !!!

Modifier

pour le numéro en double, la première option est d'ajouter ci-dessous ligne dans le code sinon il crée un nouveau à chaque fois.

addIntent.putExtra("duplicate", false);

Deuxième option est d'abord désinstaller l'application et l'icône du raccourci puis l'installer à nouveau si la première option n'a pas marché.

L'émission de com.android.launcher.action.INSTALL_SHORTCUT n'a plus aucun effet depuis android Oreo. LINK

Si vous voulez soutenir toutes les versions Android, en particulier android 8.0 ou plus récent et Oreo , 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 la permission dans le fichier manifeste:

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

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

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();
}

A partir de 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. l'utilisateur doit accepter l'ajouter.
  2. Ne peut pas être ajouté / retiré en arrière-plan.
  3. Vous êtes censé être en mesure de le mettre à jour, mais pour moi ça n'a pas marché.
  4. ne sera pas supprimé si l'application ciblée est supprimée. Seul celui qui l'a créé.
  5. Impossible de créer l'icône basée sur une ressource de l'application ciblée, sauf si elle est de l'application actuelle. Vous pouvez le faire à partir d'un bitmap bien.

Pour pré-O Android, vous pouvez utiliser ShortcutManagerCompat pour créer de nouveaux raccourcis aussi, sans aucune de ces limitations.

Depuis API level 26, en utilisant com.android.launcher.action.INSTALL_SHORTCUT est dépréciée. La nouvelle façon de créer des raccourcis utilisent ShortcutManager .

Il mentionne qu'il ya 3 types de raccourcis, statique, dynamique et épinglé. Selon vos besoins, vous pouvez choisir de les créer.

@Siddiq Abu Bakkar Réponse fonctionne. Mais afin d'éviter la création de raccourcis toutes les applications temps lancements utilisant des préférences partagées.

final String PREF_FIRST_START = "AppFirstLaunch";
 SharedPreferences settings = getSharedPreferences(PREF_FIRST_START, 0);
    if(settings.getBoolean("AppFirstLaunch", true)){

        // record the fact that the app has been started at least once
        settings.edit().putBoolean("AppFirstLaunch", false).commit();
        ShortcutIcon();

    }
final Intent shortcutIntent = new Intent(this, SomeActivity.class);

final Intent intent = new Intent();
intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
// Sets the custom shortcut's title
intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name));
// Set the custom shortcut icon
intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(this, R.drawable.icon));
// add the shortcut
intent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
sendBroadcast(intent);
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
    }
}

Je l'ai utilisé, mais certains périphériques sur l'écran d'accueil ajoute 2 icônes. Je ne comprends pas ??

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top