Я пытаюсь установить файл 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 недоступен?
Для этого ваш.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();
И это отлично работает в моем случае..
Uri.parse("file://" + absolutePath)
на Uri.fromFile(new File(absolutePath))
и теперь он работает нормально. Большое спасибо.