C'est une vieille question, mais toujours active car il n'y a pas de fonctionnalité Android explicite. Et les gars de Facebook ont trouvé un travail - en quelque sorte. Aujourd'hui, j'ai trouvé un moyen qui fonctionne pour moi. Pas parfait (voir remarques à la fin de cette réponse) mais ça marche!
L'idée principale est de mettre à jour l'icône du raccourci de mon application, créée par le lanceur sur mon écran d'accueil. Lorsque je veux changer quelque chose sur l'icône de raccourci, je le supprime d'abord et le recrée avec un nouveau bitmap.
Voici le code. Il a un bouton increment. Lorsqu'il est enfoncé, le raccourci est remplacé par un raccourci doté d'un nouveau numéro de comptage.
Vous avez d'abord besoin de ces deux autorisations dans votre manifeste:
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />
Ensuite, vous avez besoin de ces deux méthodes pour installer et désinstaller des raccourcis. La shortcutAddméthode crée une image bitmap contenant un nombre. C'est juste pour démontrer que cela change réellement. Vous voulez probablement changer cette partie avec quelque chose que vous voulez dans votre application.
private void shortcutAdd(String name, int number) {
// Intent to be send, when shortcut is pressed by user ("launched")
Intent shortcutIntent = new Intent(getApplicationContext(), Play.class);
shortcutIntent.setAction(Constants.ACTION_PLAY);
// Create bitmap with number in it -> very default. You probably want to give it a more stylish look
Bitmap bitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
Paint paint = new Paint();
paint.setColor(0xFF808080); // gray
paint.setTextAlign(Paint.Align.CENTER);
paint.setTextSize(50);
new Canvas(bitmap).drawText(""+number, 50, 50, paint);
((ImageView) findViewById(R.id.icon)).setImageBitmap(bitmap);
// Decorate the shortcut
Intent addIntent = new Intent();
addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, name);
addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON, bitmap);
// Inform launcher to create shortcut
addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
getApplicationContext().sendBroadcast(addIntent);
}
private void shortcutDel(String name) {
// Intent to be send, when shortcut is pressed by user ("launched")
Intent shortcutIntent = new Intent(getApplicationContext(), Play.class);
shortcutIntent.setAction(Constants.ACTION_PLAY);
// Decorate the shortcut
Intent delIntent = new Intent();
delIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
delIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, name);
// Inform launcher to remove shortcut
delIntent.setAction("com.android.launcher.action.UNINSTALL_SHORTCUT");
getApplicationContext().sendBroadcast(delIntent);
}
Et enfin, voici deux écouteurs pour ajouter le premier raccourci et mettre à jour le raccourci avec un compteur incrémentiel.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
findViewById(R.id.add).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
shortcutAdd("changeIt!", count);
}
});
findViewById(R.id.increment).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
shortcutDel("changeIt!");
count++;
shortcutAdd("changeIt!", count);
}
});
}
Remarques:
Cette méthode fonctionne également si votre application contrôle plus de raccourcis sur l'écran d'accueil, par exemple avec différents extras dans le Intent. Ils ont juste besoin de noms différents pour que le bon soit désinstallé et réinstallé.
La gestion programmatique des raccourcis sous Android est une fonctionnalité Android bien connue, largement utilisée mais non officiellement prise en charge. Cela semble fonctionner sur le lanceur par défaut et je ne l'ai jamais essayé nulle part ailleurs. Alors ne me blâmez pas, lorsque vous recevez ces e-mails d'utilisateur "Cela ne fonctionne pas sur mon téléphone XYZ, double rooté, super foutu"
Le lanceur écrit un Toastlorsqu'un raccourci a été installé et un autre lorsqu'un raccourci a été désinstallé. Je reçois donc deux Toasts à chaque fois que je change d'icône. Ce n'est pas parfait, mais bon, tant que le reste de mon application est parfait ...