Es ist eine alte Frage, aber immer noch aktiv, da es keine explizite Android-Funktion gibt. Und die Jungs von Facebook haben eine Lösung gefunden - irgendwie. Heute habe ich einen Weg gefunden, der für mich funktioniert. Nicht perfekt (siehe Anmerkungen am Ende dieser Antwort), aber es funktioniert!
Die Hauptidee ist, dass ich das Symbol der Verknüpfung meiner App aktualisiere, die vom Launcher auf meinem Startbildschirm erstellt wurde. Wenn ich etwas am Verknüpfungssymbol ändern möchte, entferne ich es zuerst und erstelle es mit einer neuen Bitmap neu.
Hier ist der Code. Es hat einen Knopf increment. Wenn diese Taste gedrückt wird, wird die Verknüpfung durch eine Verknüpfung mit einer neuen Zählnummer ersetzt.
Zuerst benötigen Sie diese beiden Berechtigungen in Ihrem Manifest:
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />
Dann benötigen Sie diese beiden Methoden zum Installieren und Deinstallieren von Verknüpfungen. Die shortcutAddMethode erstellt eine Bitmap mit einer Nummer. Dies soll nur zeigen, dass es sich tatsächlich ändert. Sie möchten diesen Teil wahrscheinlich mit etwas ändern, das Sie in Ihrer App möchten.
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);
}
Und schließlich sind hier zwei Listener, die die erste Verknüpfung hinzufügen und die Verknüpfung mit einem inkrementierenden Zähler aktualisieren.
@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);
}
});
}
Bemerkungen:
Diese Methode funktioniert auch, wenn Ihre App mehr Verknüpfungen auf dem Startbildschirm steuert, z. B. mit verschiedenen Extras im Intent. Sie benötigen nur unterschiedliche Namen, damit der richtige deinstalliert und neu installiert wird.
Die programmatische Behandlung von Verknüpfungen in Android ist eine bekannte, weit verbreitete, aber nicht offiziell unterstützte Android-Funktion. Es scheint auf dem Standard-Launcher zu funktionieren und ich habe es nirgendwo anders versucht. Also beschuldigen Sie mich nicht, wenn Sie diese Benutzer-E-Mails erhalten. "Es funktioniert nicht auf meinem XYZ-Telefon mit doppelter Wurzel und Super-Explosion."
Der Launcher schreibt eine, Toastwenn eine Verknüpfung installiert wurde, und eine, wenn eine Verknüpfung deinstalliert wurde. So bekomme ich Toastjedes Mal zwei s, wenn ich das Symbol ändere. Das ist nicht perfekt, aber gut, solange der Rest meiner App perfekt ist ...