У меня есть несколько Android-устройств, которые нужно прошить пользовательскими прошивками и раздать клиентам. Частью этого ПЗУ будет приложение «поддержка», привязанное к устройству. Его нельзя опубликовать в Google Play. Мне нужно иметь возможность предлагать пользователям возможность загружать и устанавливать обновленные версии программного обеспечения. У меня уже реализован код проверки, загрузки и установки, однако он зависит от устройств, настроенных для установки приложений из неизвестных источников. Мне нужно, чтобы устройство могло загружать и устанавливать этот конкретный apk, но при этом не позволяло устанавливать какие-либо другие приложения из неизвестных источников.
Это возможно?
(изменить: чтобы уточнить, как выбранный ответ наконец сработал)
Код, добавленный к активности, был следующим:
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(Environment.getExternalStorageDirectory() +"/update.apk")), "application/vnd.android.package-archive");
intent.putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true);
intent.putExtra(Intent.EXTRA_ALLOW_REPLACE, true);
startActivityForResult(intent, 0);
В манифест андроида был добавлен следующий код:
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
После установки приложения я использовал проводник корневых файлов, чтобы переместить apk с /user/apps
на /system/apps
, затем после перезагрузки телефона приложение смогло установить себя поверх самого себя, без запроса пользователю на включение ненадежных источников. Запрос на установку, в котором перечислены разрешения, необходимые приложению, и дающий пользователю возможность установить или не устанавливать, все еще появляется, но это нормально.