2011-01-03 6 views
8

è possibile ottenere il nome del file di installazione che è memorizzato su/sdcard/ download /? Voglio ottenere da app, nome file apk che lo ha installato. Esiste un modo semplice per farlo in particolare con l'app non di mercato?Android: come ottenere il nome del file di installazione in modo programmatico?

+0

cosa intendi con "nome file di installazione"? Il nome dell'apk? Se sì, perché lo vuoi? Si prega di aggiungere ulteriori dettagli. –

+0

Sì, voglio ottenere il nome apk che è memorizzato su sd card. Ho creato il file apk e lo ho memorizzato sul server, quando qualcuno vuole scaricarlo, il server genera un file con un nome univoco, ad esempio: "application00086.apk". La domanda è: come ottenere questo nome di file univoco dalla mia app che è dopo l'installazione memorizzata nella directory:/data/app/Ho trovato il metodo interessante: getInstallerPackageName ma questo metodo restituisce solo il nome del pacchetto di installazione e solo per le app distribuite su Android Market, I desidera ottenere il file di installazione NAME e non desidera distribuire la mia app in Market. – Wolfie

+0

@ Wolfie: ho affrontato lo stesso problema con te. Hai una soluzione per questo. Grazie mille ! – hoang8f

risposta

2

Il modo migliore è sicuramente includere la stringa di versione nel manifest. Questo è davvero l'unico metodo affidabile (e professionale). Android non memorizza il nome del file contenente l'APK da nessuna parte, quindi non esiste un modo per ottenerlo.

In teoria si potrebbe forse costruire qualcosa utilizzando un FileObserver, che la creazione di file guardato in alcune directory e ogni volta che un file è stato creato con l'estensione .apk si potrebbe aprire il file, estrarre il manifesto, trovare il nome del pacchetto della APK e quindi memorizzarlo insieme al nome file in una memoria persistente. Quindi, quando è necessario ottenere le informazioni sulla versione, è possibile cercare nella memoria persistente per ottenere il nome del file corrispondente al nome del pacchetto necessario.

Naturalmente, ciò funzionerebbe solo se l'app è stata installata sul dispositivo prima dello gli altri file APK sono stati scaricati/installati. Questo non funzionerebbe per scoprire il nome del file della tua applicazione.

1

Hmm, non sono sicuro di cosa si intende per cartella sdcard o il download, ma si potrebbe ottenere il percorso APK nella directory di sistema/dati:

riga di comando:

$ adb shell pm list packages | grep mk.trelloapp 
package:mk.trelloapp 
$ adb shell pm path mk.trelloapp 
package:/data/app/mk.trelloapp-1/base.apk 

o da Lei applicazione Android codice: (processo di eseguire semplicemente)

 Process exec = Runtime.getRuntime().exec("pm path mk.trelloapp"); 

     exec.waitFor(); 

     InputStream inputStream = exec.getInputStream(); 
     BufferedReader br = new BufferedReader(new InputStreamReader(inputStream)); 

     StringBuilder builder = new StringBuilder(); 
     String line = null; 
     while((line = br.readLine()) != null) { 
      builder.append(line); 
     } 

     String commandOutput = builder.toString(); 

codice di cui sopra dovrebbe semplicemente dare stringa contenente "pacchetto: /data/app/mk.trelloapp-1/base.apk"

Quando si acquisisce il percorso nella directory/data, è possibile provare a cercare lo stesso file (simile) in altre directory (supponendo che non sia stato eliminato), poiché il pacchetto Android viene copiato nella directory/data durante l'installazione.

+0

Questo non è utile. OP vuole essere in grado di ottenere il nome file originale del file APK che è stato scaricato perché il numero di versione della sua app è codificato come parte di quel nome file. Il percorso APK per '/ data' non include queste informazioni, in quanto utilizza solo il nome del pacchetto. –

Problemi correlati