Обновление приложения OTA

Я разрабатываю приложение, которое будет доступно на веб-сайте (возможно, на рынке). Проблема, с которой я сталкиваюсь на данный момент, заключается в том, как обрабатывать обновления приложения. Я знаю, как сверить версию с текущей и знаю, нужно ли ее обновлять. Вопрос... как?

Есть ли способ загрузить APK с веб-сайта и начать процесс установки? Конечно, пользователь должен будет подтвердить, но я просто хочу иметь возможность запустить его для него. На данный момент я делаю это:

private void doUpgrade() {
    // TODO Auto-generated method stub
    Builder builder = new AlertDialog.Builder(this);
    builder.setTitle(getString(R.string.upgrade));
    builder.setIcon(R.drawable.help);
    builder.setMessage(getString(R.string.needUpgrade));
    builder.setPositiveButton(getString(R.string.ok), new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            // TODO Auto-generated method stub

            Map<String, String> data = new HashMap<String, String>();

            try {
                HttpResponse re = Registration.doPost("http://www.android-town.com/appRelease/AndroidTown.apk",data);

                int statusCode = re.getStatusLine().getStatusCode();
                closeApp();

            } catch (ClientProtocolException e) {
                e.printStackTrace();
                Toast.makeText(getApplicationContext(), getString(R.string.noURLAccess), Toast.LENGTH_SHORT).show();
                closeApp();
            } catch (IOException e) {
                e.printStackTrace();
                Toast.makeText(getApplicationContext(), getString(R.string.noURLAccess), Toast.LENGTH_SHORT).show();
                closeApp();
            }
        }
    });
    builder.setNegativeButton(getString(R.string.cancel), new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            // TODO Auto-generated method stub
            dialog.cancel();
            closeApp();
        }
    });
    builder.show();
}

Но на самом деле это ничего не делает... должен ли я открывать веб-представление с URL-адресом? Новый исполняемый поток? Любым другим путем? Пожалуйста помоги :)

Ваше здоровье


person Bostjan    schedule 06.04.2010    source источник


Ответы (3)


Проще всего просто запустить Intent, чтобы открыть URL-адрес загрузки в файле Browser. Это загрузит APK, и пользователь сможет затем установить его, щелкнув по нему в диспетчере загрузок.

Вы говорите, что это будет обрабатывать OTA отдельно от рынка, поэтому пользователь уже должен был отключить «Разрешить приложения из нерыночных источников» при первоначальной установке вашего приложения.

person alexanderblom    schedule 06.04.2010
comment
Насколько я понимаю, вы предлагаете, чтобы он все же сам скачал apk, а затем установил его с диска. - person alexanderblom; 06.04.2010

Просто обратите внимание, что это вряд ли будет работать должным образом: на большинстве устройств параметр «Разрешить приложения из источников, отличных от Market» отключен (в разделе «Настройки»> «Приложения»).

Это означает, что когда вы запускаете намерение установить приложение, пользователь получит диалоговое окно с предупреждением, и установка завершится ошибкой.

Хотя вы можете проверить наличие новых обновлений из внешнего источника (например, проверить текстовый файл на вашем сервере) и уведомить пользователя, я бы перенаправил их на сам Android Market для обновления.

person Christopher Orr    schedule 06.04.2010
comment
Хм... стыдно. Но я думаю, если нет другого пути, это придется сделать. Просто для целей тестирования было бы очень неплохо иметь такую ​​функцию и не заставлять бета-тестеров скачивать apk, переносить его на телефон и устанавливать... - person Bostjan; 06.04.2010
comment
Если это только для бета-тестеров, я уверен, что вы можете заставить их включить опцию вне рынка. - person Christopher Orr; 06.04.2010

Как все говорили, опция «Разрешить приложения из источников, не связанных с рынком», может стать для вас настоящей проблемой, поскольку люди, не являющиеся бета-тестерами или им подобные, не будут заинтересованы в проверке этой опции по разным причинам. Попробуйте Testflight, должно помочь. https://testflightapp.com/android/

person Sparkplug    schedule 05.12.2013
comment
Apple купила компанию Burstly, создавшую Testflight. Есть большая вероятность, что в будущем он перестанет поддерживать Android. Это также хороший сервис OTA: otaupdatecenter.pro. - person Bart Burg; 14.05.2014