Установка apk присутствует в каталоге данных

1

Я пытаюсь установить файл apk, присутствующий во внутреннем/внешнем хранилище. Это мой код:

final String fileuri = "file://" + absolutePath;
Log.v("FILE_BROWSER", "File to be installed: " + Uri.parse(fileuri).getPath());
final Intent promptInstall = new Intent(Intent.ACTION_VIEW);
promptInstall.setDataAndType(Uri.parse(fileuri), "application/vnd.android.package-archive");
promptInstall.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(promptInstall);

Файл apk успешно устанавливается, если файл присутствует на внешнем хранилище. Например. /mnt/sdcard/MyApp.apk

Но если файл apk присутствует во внутреннем хранилище (например./data/data/com.myapp/files/MyApp.apk), установка не выполняется. Сообщение об ошибке: Parse Error: There is a problem parsing the package

Одним из решений может быть копирование файла на SDCARD, а затем его установка. Но в сценарии, где SDCARD недоступен, этот трюк не будет работать.

Любая помощь на этих парней? Как установить apk во внутренний каталог хранения, если SDCARD недоступен?

  • 0
    Убедитесь, что когда ваш файл .apk помещен во внутреннее хранилище, у него есть разрешение WORLD_READABLE.
  • 0
    Я реализую приложение, эквивалентное файловому браузеру. И если моя заявка может увидеть файл, то файл, я думаю, WORLD_READABLE.
Показать ещё 2 комментария
Теги:
uri

1 ответ

4
Лучший ответ

Для этого ваш.apk файл должен Context.MODE_WORLD_READABLE разрешение Context.MODE_WORLD_READABLE.

Я делаю это, чтобы написать файл.apk в моем приложении Внутреннее хранилище

String outFileName = path+"/<Application_Name>.apk";
OutputStream myOutput = openFileOutput("<Application_Name>.apk", Context.MODE_WORLD_READABLE);

И затем, чтобы установить его,

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(path+"/<Application_Name>.apk")), "application/vnd.android.package-archive");
startActivity(intent);

Здесь путь path = getFilesDir().getAbsolutePath();

И это отлично работает в моем случае..

  • 1
    Сначала я попытался установить разрешение для файла в MODE_WORLD_READABLE, как изначально было предложено пользователем 370305. Не работал тогда. После этого я изменил Uri.parse("file://" + absolutePath) на Uri.fromFile(new File(absolutePath)) и теперь он работает нормально. Большое спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню