2013-01-19 15 views
5

È possibile creare un collegamento da ADB sul programma di avvio del mio android? Ho un file .bat per installare le mie applicazioni dal mio PC (tramite doppio clic), ma dopo ho bisogno di cercare sempre sull'enorme (non così intuitivo) elenco di applicazioni del programma di avvio. Se fosse possibile aggiungere questa funzionalità al mio file .bat sarebbe fantastico. Ho già provato a cercare sul web senza fortuna: S.Creazione di scorciatoie in Android tramite ADB

Grazie in anticipo

+1

C'è relativamente ben documentato 'com.android.launcher.action.INSTALL_SHORTCUT', che si potrebbe chiamare attraverso' adb shell broadcast', ma uno degli extra è l'intento di lancio. Se non è possibile posizionarlo sulla riga di comando, è possibile scrivere un'app stub che non fa altro che trasmettere quell'intenzione, quindi installarla, richiamarla e disinstallarla dalla riga di comando. – 323go

risposta

7

Ci sono un paio di modi per gestire questo. Se il tuo bisogno principale è quello di essere in grado di avviare rapidamente la tua applicazione ogni volta che esegui una nuova modifica, allora una soluzione adb shell am intent -n com.example.app/.App è la soluzione più semplice.

Se si desidera semplicemente creare una scorciatoia (e non ti interessa dove) usa com.android.launcher.action.INSTALL_SHORTCUT come dicono tutti. Avrai bisogno di un'app o di un cestino per farlo, poiché la trasmissione am non prenderà intenti annidati.

Se si sta lavorando con uno specifico launcher (come ADW Launcher) è possibile modificare il database delle scorciatoie. Questo vi permetterà di specificare le coordinate del collegamento ([2, 3], in questo caso)

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

avrete bisogno di dire al programma di avvio per aggiornare dal database. Solitamente l'unico modo è quello di uccidere il launcher. Le versioni successive di am (il comando shell ActivityManager) hanno opzioni per riavviare un pacchetto, le versioni precedenti no. In tal caso si avrebbe bisogno di scrivere una piccola applicazione:

ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
am.restartPackage("org.adw.launcher"); 
+0

cosa succede se voglio creare il collegamento tramite codice, a un'app di lanuncher specifica e un'attività specifica al suo interno? –

+0

Tutto il codice sopra riportato fa riferimento a un'attività specifica all'interno di un'app specifica. Ho solo esperienza con ADW, altri lanciatori devono memorizzare le informazioni da qualche parte, senza dubbio un database. – Renate

+0

Sì, ne ho fatto un post. qui: http://stackoverflow.com/questions/21394477/how-to-create-a-shortcut-of-an-app-on-a-specific-launcher-app. uno dei commenti c'è la risposta. –