Установщик пакета Android – как получить «Открыть» и «Готово» и результат работы как?

Мое Android-приложение имеет возможность перейти на более новую версию, более новую версию APK. Я сохраняю ее доступной по пути в SD-карте. При нажатии кнопки «Обновить» я вызываю следующий метод.

public static void launchInstaller(Activity act, String apkPath) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(new File(apkPath)), "application/vnd.android.package-archive"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); act.startActivityForResult(intent, 0); } 

Причина, по которой я включаю FLAG_ACTIVITY_NEW_TASK, заключается в том, что после обновления я хочу иметь опции «Открыть» и «Готово», которые не отображаются, если я не использую этот флаг.

Когда вышеприведенный код запускает установщик пакета, он имеет две опции: «ОК» и «Отмена», когда пользователь нажимает «Отмена», я хочу знать, что пользователь отменил его. Но я не могу знать, потому что onActivityResult называется досрочно. Я пришел к тому, почему это происходит после прочтения следующих сообщений.

Android – startActivityForResult сразу же запускает onActivityResult

OnActivityResult (), вызванный преждевременно

Они просят меня убедиться, что Intent, который я использую для запуска этой операции, на нем не установлен FLAG_ACTIVITY_NEW_TASK. Глянь сюда:

http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK

В частности, обратите внимание: «Этот флаг нельзя использовать, когда вызывающий абонент запрашивает результат от запуска активности».

Если действие запускается в рамках новой задачи, то Android немедленно вызовет onActivityResult () с RESULT_CANCELED, потому что действие в одной задаче не может вернуть результаты другой задаче, только действия в одной и той же задаче могут сделать это.

Но в моем случае я не могу удалить FLAG_ACTIVITY_NEW_TASK, потому что иначе я не получу опции «Открыть» и «Готово» при успешной модернизации.

Кто-нибудь сталкивался с подобной проблемой? Пожалуйста, помогите мне, так как это сводит меня с ума.

Solutions Collecting From Web of "Установщик пакета Android – как получить «Открыть» и «Готово» и результат работы как?"

Вы должны использовать намерение трансляции, добавленное в пакет. Создайте пакет прослушивания широковещательного приемника . Если добавленный пакет равен вашему пакету, пользователь подтвердит установку, иначе отклоните процесс установки. Если вы спросите, какие добрые дополнения могут быть возвращены андроидом, андроид возвращает EXTRA_UID о пакете. Метод PackageManager преобразует uid в пакет. (GetPackagesForUid (int uid) возвращает массив String, но обычно возвращает один элемент в массиве, вкратце обычно длина массива равна 1.