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 shortcutAdd
Methode 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, Toast
wenn eine Verknüpfung installiert wurde, und eine, wenn eine Verknüpfung deinstalliert wurde. So bekomme ich Toast
jedes Mal zwei s, wenn ich das Symbol ändere. Das ist nicht perfekt, aber gut, solange der Rest meiner App perfekt ist ...
Versuchen Sie dies, es funktioniert gut für mich:
1. Ändern Sie Ihre
MainActivity
Abschnitt inAndroidManifest.xml
, löschen Sie ihn, Zeile mitMAIN
Kategorie inintent-filter
Abschnitt2. Erstellen Sie
<activity-alias>
für jedes Ihrer Symbole. So was3 . Programmgesteuert festlegen: Legen Sie das ENABLE-Attribut für das entsprechende Attribut fest
activity-alias
Hinweis: Es muss immer mindestens eine aktiviert sein.
quelle
Sie können das Manifest oder die Ressource in der signierten und versiegelten APK nur durch ein Software-Upgrade ändern.
quelle
Programmgesteuert möchten Sie den Anwendungsstarter möglicherweise selbst veröffentlichen:
Hinweis: Diese Methode funktioniert ab Android 8.0 - Oreo nicht mehr
Fügen Sie in Ihrer AndroidManifest.xml Folgendes hinzu:
Dann müssen Sie Ihre App Launcher-Absicht erstellen:
Erstellen Sie eine Installationsverknüpfungsabsicht mit Ihrem App-Starter und dem benutzerdefinierten Symbol:
Und schließlich starten Sie die Sendungsabsicht:
quelle
Angenommen, Sie möchten das auf dem Startbildschirm angezeigte Symbol ändern, können Sie dies einfach tun, indem Sie ein Widget erstellen, das genau dies tut. Hier ist ein Artikel, der zeigt, wie dies für eine Anwendung vom Typ "Neue Nachrichten" ähnlich dem iPhone erreicht werden kann:
http://www.cnet.com/8301-19736_1-10278814-251.html
quelle
Die Lösung von @ PA funktioniert teilweise für mich. Detaillierte meine Ergebnisse unten:
1) Das erste Code-Snippet ist falsch, siehe unten:
2) Verwenden Sie den folgenden Code, um alle Symbole zu deaktivieren, bevor Sie ein anderes aktivieren. Andernfalls wird ein neues Symbol hinzugefügt, anstatt es zu ersetzen.
ABER, wenn Sie den obigen Code verwenden, wird die Verknüpfung auf dem Homescreen entfernt! Und es wird nicht automatisch wieder hinzugefügt. Möglicherweise können Sie das Symbol programmgesteuert wieder hinzufügen, aber es bleibt wahrscheinlich nicht an der gleichen Position wie zuvor.
3) Beachten Sie, dass das Symbol nicht sofort geändert wird. Dies kann einige Sekunden dauern. Wenn Sie direkt nach dem Ändern darauf klicken, wird möglicherweise die Fehlermeldung "App ist nicht installiert" angezeigt.
Daher ist diese Lösung meiner Meinung nach nur zum Ändern des Symbols im App Launcher geeignet, nicht für Verknüpfungen (dh das Symbol auf dem Homescreen).
quelle
Versuchen Sie diese Lösung
Fügen Sie den folgenden Code hinzu, wenn Sie Ihr App-Symbol ändern möchten
quelle
AndroidManifest.xml
Beispiel:Folgen Sie dann dem unten angegebenen Code in
MainActivity
:quelle
com.pritesh.resourceidentifierexample.MainActivity-Red doesn't exist in com.pritesh.resourceidentifierexample
Ausnahme. Hier habe ich Ihren Manifestnamen nur verwendet, um mein Problem zu demonstrierenUm die Lösung von Markus zum Laufen zu bringen, brauchte ich die erste Absicht:
quelle
Bei Anwendung der genannten Vorschläge habe ich das Problem, dass die App getötet wird, wenn das Standardsymbol in ein neues Symbol geändert wird. Habe also den Code mit ein paar Tweaks implementiert. Schritt 1). Erstellen Sie in der Datei AndroidManifest.xml für die Standardaktivität mit android: enabled = "true" und anderen Alias mit android: enabled = "false". Sie werden diese nicht mit android anhängen, sondern anhängen: enabled = "true".
Schritt 2). Erstellen Sie eine Methode, mit der der erste Aktivitätsalias mit dem Standardsymbol deaktiviert und der zweite Alias mit dem Symbol aktiviert werden muss.
Schritt 3). Rufen Sie diese Methode nun je nach Ihren Anforderungen auf, z. B. beim Klicken auf eine Schaltfläche oder bei datumsspezifischen oder anlassspezifischen Bedingungen.
Ich hoffe, dies hilft denjenigen, die mit dem Problem konfrontiert sind, dass die App beim Symbolwechsel getötet wird. Viel Spaß beim Codieren :)
quelle