В моем приложении для 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() вызывается преждевременно
Они просят меня убедиться, что для намерения, которое я использую для запуска действия, не установлен флаг 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, потому что иначе я не получу опции «Открыть» и «Готово» при успешном обновлении.
Кто-нибудь сталкивался с подобной проблемой? Пожалуйста, помогите мне, так как это сводит меня с ума.