Проблема обновления приложений для Android

Недавно я столкнулся с проблемой моего процесса обновления приложений для Android.

Вкратце, приложение может проверить, было ли добавлено обновление с более высоким кодом версии на сервере. Если это так, пользователь решает, следует ли обновлять. После того, как приложение загрузится и начнется стандартная установка:

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

Проблема в том, что, когда андроид Intent завершает установку, «теоретически» активность с информацией «Приложение было установлено» и 2 кнопки «Готово», «Открыть». Я написал «теоретически», потому что до сих пор я сталкивался с сценариями ниже:

  1. Установлено приложение, отображается активность с сообщением «Приложение установлено», пользователь нажимает «Открыть», но ничего не происходит (Android 2.3. *) Или приложение открывается правильно – это поведение случайное.

  2. Приложение установлено, отображается активность с сообщением «Приложение установлено», но внезапно исчезает.

Попытка обойти эту ошибку (?) Я нашел http://developer.android.com/reference/android/content/Intent.html#ACTION_PACKAGE_REPLACED . BroadcastReceiver, который я реализовал, начал Launch Activity и предположил, что это было правильное решение.

  <receiver android:name=\".MyReceiver\" > <intent-filter> <action android:name="android.intent.action.ACTION_PACKAGE_REPLACED" /> //Or from API 12 <action android:name="android.intent.action.ACTION_MY_PACKAGE_REPLACED" /> </intent-filter> </receiver> 

Это решение пришлось модифицировать, потому что приложения с более низким API (ниже 12) не могли обрабатывать ACTION_MY_PACKAGE_REPLACED, поэтому я реализовал зависящее от API поведение, которое:

  • Разрешено обычно устанавливать приложение udpate и запускать приложение из Activity с кнопкой «Готово» / «Открыть» (API <12)

  • Запустил приложение для обновления через MyReceiver после заметок ACTION_MY_PACKAGE_REPLACED.

Это мое текущее решение.

Мои вопросы:

  • Почему обновленное приложение открывается случайно после нажатия «Открыть» после установки в Android с API ниже 12?

  • Почему активность с кнопками «Готово» / «Открыть» исчезает на устройствах с более высоким API?

Я пытался закончить аппликацию перед установкой, но это не помогло.

Мое объяснение заключается в том, что после установки новый пакет должен перезаписать старый, чтобы старый пакет был просто удален, и это основная причина исчезновения запуска.

Как я уже писал, это мое текущее решение, и я не удовлетворен. Если бы кто-нибудь мог прояснить этот вопрос, я был бы очень благодарен.

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

Редактировать:

Хорошо, решение очень просто: для успешного обновления вам нужно запустить Intent как новую задачу (arrrgh …):

 final Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(new File(PATH_TO_APK)), "application/vnd.android.package-archive"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); 

Solutions Collecting From Web of "Проблема обновления приложений для Android"

Во-первых, добавьте «фильтр-замысел» в манифест, как показано ниже:

 `<activity android:name="com.package.MainActivity"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <data android:scheme="file" /> <data android:mimeType="application/vnd.android.package-archive" /> </intent-filter> </activity>` 

Затем установите флаги своей цели для новой задачи:

intentAPK.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);