2011-01-03 3 views
8

можно получить имя файла установщика, которое хранится на/sdcard/ download /? Я хочу получить из app, имя файла apk, которое его установило. Есть простой способ сделать это, особенно с нерыночным приложением?Android: Как получить имя файла установщика программно?

+0

Что вы подразумеваете под "установщиком имени файла"? Имя apk? Если да, то зачем вам это нужно? Пожалуйста, добавьте более подробную информацию. –

+0

Да, я хочу получить имя apk, которое хранится на SD-карте. Я создал файл apk и сохранил его на сервере, когда кто-то хочет его загрузить, сервер сгенерирует файл с уникальным именем, например: «application00086.apk». Возникает вопрос: как получить это уникальное имя файла из моего приложения, которое после установки хранится в каталоге:/data/app/Я нашел интересный метод: getInstallerPackageName, но этот метод возвращает только имя пакета установщика и только для приложений, распространяемых на Android Market, я хотите получить файл NIST установщика и не хотите распространять мое приложение на Market. – Wolfie

+0

@Wolfie: Я столкнулся с той же проблемой с тобой. У вас есть решение для этого. Большое спасибо ! – hoang8f

ответ

2

Лучше всего включить строку версии в манифест. Это действительно единственный надежный (и профессиональный) метод. Android не сохраняет имя файла, содержащего APK в любом месте, поэтому нет способа получить его.

Теоретически вы могли бы, вероятно, что-то построить с помощью FileObserver, что наблюдают создание файлов в определенных каталогах, и каждый раз, когда был создан файл с расширением .apk вы можете открыть файл, извлечь манифест, найти имя пакета APK и затем сохраните это вместе с именем файла в некотором постоянном хранилище. Затем, когда вам нужно получить информацию о версии, вы можете посмотреть в хранилище persisten, чтобы получить имя файла, соответствующее требуемому имени пакета.

Конечно, это будет работать, только если ваше приложение было установлено на устройстве до были загружены/установлены другие файлы APK. Это не помогло бы узнать имя вашего собственного приложения.

1

Хм, я не уверен, что вы подразумеваете под SDCard или загрузить папку, но вы можете получить АПК путь в системе/директории данных:

командной строки:

$ 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 

или от вас андроид приложения код: (просто запустить процесс)

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

код выше должен просто дать вам Струнный содержащий "пакет: /data/app/mk.trelloapp-1/base.apk"

Когда вы приобретаете путь в каталоге/данных, вы можете попытаться найти тот же (похожий) файл в других каталогах (при условии, что он не был удален), так как пакет android копируется в каталог/data во время установки.

+0

Это не полезно. OP хочет получить исходное имя файла APK, который был загружен, потому что номер версии его приложения закодирован как часть этого имени файла. Путь APK к '/ data' не включает эту информацию, поскольку он использует только имя пакета. –

Смежные вопросы