Es gibt ein paar Möglichkeiten, damit umzugehen. Wenn es Ihr Hauptanliegen ist, Ihre Anwendung bei jeder Neubearbeitung schnell zu starten, ist adb shell am intent -n com.example.app/.App
die einfachste Lösung.
Wenn Sie nur eine Verknüpfung erstellen möchten (und Sie nicht wo), verwenden Sie com.android.launcher.action.INSTALL_SHORTCUT
, wie jeder sagt. Sie benötigen eine App oder einen Bin, um das zu tun, da die Übertragung keine verschachtelten Absichten erfordert.
Wenn Sie mit einem bestimmten Launcher (wie ADW Launcher) arbeiten, können Sie die Datenbank der Verknüpfungen hacken. Dies ermöglicht es Ihnen die Koordinaten der Verknüpfung zu spezifizieren ([2, 3] in diesem Fall)
adb shell sqlite3 /data/data/org.adw.launcher/databases/launcher.db "DELETE FROM favorites WHERE _id=1; INSERT INTO favorites VALUES(1,'MyApp','#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.example.app/.App;end',-100,0,2,3,1,1,0,-1,NULL,0,NULL,NULL,NULL,NULL,NULL);"
Sie müssen den Launcher sagen, aus der Datenbank zu aktualisieren. Normalerweise besteht die einzige Möglichkeit darin, den Launcher zu töten. Spätere Versionen von am (der ActivityManager-Shell-Befehl) haben Optionen zum Neustarten eines Pakets, frühere Versionen nicht. In diesem Fall müssen Sie eine kleine App schreiben:
ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
am.restartPackage("org.adw.launcher");
Es gibt das relativ gut dokumentierte 'com.android.launcher.action.INSTALL_SHORTCUT', dass Sie durch' adb shell broadcast' nennen könnten, aber man der Extras ist die Launch-Absicht. Wenn Sie das nicht in der Befehlszeile platzieren können, könnten Sie eine Stub-App schreiben, die nur diese Absicht ausstrahlt und dann installiert, aufruft und über die Befehlszeile deinstalliert. – 323go