2010-04-14 5 views
15

Хотелось бы узнать, можно ли программно запустить программу apk, которая находится на карте?Автоматическая установка apk

+4

Вы имеете в виду как вирус? –

+0

Нет, я планирую обновить свое приложение таким образом. Загрузите новый apk с моего сайта, а затем установите его автоматически. – rantravee

+0

Это то, что уже работает? Если у пользователя установлена ​​опция «Установить нерыночные приложения», они просто просматривают ссылку для загрузки и при успешной загрузке приложение автоматически устанавливается? – Samuh

ответ

20
Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setDataAndType(Uri.fromFile(new File(fileName)), "application/vnd.android.package-archive"); 
startActivity(intent); 

(любезно anddev.org)

+0

иногда он работает, иногда он сообщает, что он не смог найти файл AndroidManifest и отменяет установку – rantravee

+0

Это говорит о том, что, возможно, вы вызываете 'startActivity()' до того, как загруженный APK полностью покраснел вспышка или что-то еще. Я бы попытался выполнить этот шаг за раз, начиная с использования 'startActivity()' на APK, который вы вручную кладете на SD-карту (например, adb push, DDMS File Manager, mount/drag/unmount с вашей машины разработки). Как только это будет работать так, как вы хотите, вставьте в механизм загрузки. – CommonsWare

+0

Действительно, это тот случай, о котором я говорю. Однако я заметил, что если apk находится в sdcard/download, он установлен, но если он будет установлен в sdcard, если будет сгенерировать эту ошибку 04-15 16: 51: 02.686: ERROR/filemap (215): mmap (0,0) не удалось: Недействительный аргумент 04-15 16: 51: 02.686: WARN/zipro (215): Не удалось сопоставить '/sdcard/myapk.apk': Недопустимый аргумент 04-15 16: 51: 02.695: DEBUG/актив (215): не удалось открыть Zip-архив '/sdcard/myapk.apk' 04-15 16: 51: 02.695: DEBUG/filemap (215): munmap (0x0, 0) не удалось , даже если путь : INFO/mytag (196): путь установки: ///sdcard/myapk.apk – rantravee

0

См., Если это может помочь: install Apk via Intent. Не уверен, что это путь.

+0

Вы использовали это раньше? если да, пожалуйста, укажите, что такое «пакет», «xxx» см. в? Uri installUri = Uri.fromParts ("package", "xxx", null); – rantravee

+0

@Samuh: Прошел сайт кода вниз –

4

Только в случае, если кто-то ищет эту информацию .... Если вы хотите установить APK, который вы также программно загружен и сохранен в ваших личных «файлы» папок (т. е «/data/data/com.yourapp.name/files»), вам нужно получить Ури для полного пути, первого использования getFileStreamPath следующим образом:

File fullPath = getFileStreamPath("name_of_downloaded_app.apk"); 

Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setDataAndType(Uri.fromFile(fullPath), "application/vnd.android.package-archive"); 
startActivity(intent); 

Надеется, что это помогает ...

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