Переустановите приложение apk программно без загрузки

Из-за это раздражающее ограничение для Android Мне нужно, чтобы пользователи переустанавливали мое приложение, чтобы разрешения манифеста были обнаружены другими приложениями.

Это уже разочаровывает пользователя, но, кроме того, я не вижу способа переустановить приложение из apk, хранящегося в /data/app, и поэтому мне пришлось бы загружать ту же версию на карту памяти перед тем как запустить обычную установку.

Я с нетерпением жду, чтобы кто-то сказал мне, что мне не хватает чего-то очевидного! Я нарисовал пробел...

Спасибо заранее.

Пожалуйста, задайте вопрос, если вы хотите, чтобы он был разрешен! Приветствия.


EDIT. С учетом замечаний @hackbod вы можете использовать следующий код для запуска диалогового окна установки.

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

На моем желе Bean устройства представлены два варианта: установка пакета и проверка и установка. Я не знаю, рассмотрит ли последний вопрос:

  • Установка вашего приложения таким образом, вероятно, удалит право собственности на него из Play Маркета.

Мое приложение бесплатное, поэтому я не могу проверить оплаченную проблему:

  • Обратите внимание, что если ваше приложение заблокировано вперёд (что неизбежно для всех платных приложений, начинающихся с JB, из-за шифрования приложения), это не сработает, потому что исполняемый файл приложения не читается другими.

Хотя hackbod заканчивается "читаемым другими", который предполагает, что если вы выполняете это через свой собственный код, для вашего собственного приложения он читабельен? Пожалуйста, поправьте меня, если вы сможете проверить это, и я ошибаюсь.

Ответ 1

Возможно, вы могли бы просто получить путь к вашему .apk через Context.getApplicationInfo(). sourceDir и запустить установщик приложений с этим путем. Однако, если ваше приложение заблокировано вперёд (что неизбежно для всех платных приложений, начинающихся с JB, из-за шифрования приложения), это не сработает, потому что ваш исполняемый файл приложения не читается другими. В этом случае вам нужно будет скопировать файл .apk в любой мир, читаемый (например, во внешнем хранилище) и установить его там.

Независимо от того, что вы здесь делаете, это имеет некоторые неизбежные очень негативные последствия:

  • Единственный способ сделать любой вид установки из вашего приложения - пройти через интерфейс боковой загрузки, который (а) станет очень страшным для пользователя, и (б) потребует, чтобы пользователь включите боковую загрузку, чтобы продолжить.
  • Установка вашего приложения таким образом, вероятно, удалит право собственности на него из Play Маркета (поскольку он больше не тот, который его установил). Это может означать, например, что пользователь больше не может сообщать вам о сбоях или ANR в магазине воспроизведения или других негативных последствиях. Я точно не знаю, какие проблемы на самом деле будут происходить здесь, но я действительно не предполагал, что все будет хорошо.

В конечном счете, я бы очень не хотел этого делать. Какое разрешение вам нужно, это заставляет вас это делать? По многим причинам я бы не рекомендовал, чтобы сторонние приложения объявляли свои собственные разрешения в большинстве случаев, потому что существует множество случаев плохого использования пользователями в отношении разрешений, которые известны только после того, как они, возможно, были необходимы.