Принудительно открыть приложение Android после завершения установки

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

Затем, чтобы получить обновление для приложения, я смотрю, есть ли новое, и если да, запускаю фоновую задачу для загрузки нового обновления с sftp-сервера, используя jsch, и когда приложение завершит загрузку, я установлю apk, используя ACTION_VIEW намерение:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/update_app.apk")), "application/vnd.android.package-archive");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

Проблема здесь в том, что когда установка завершена, появляется экран Android по умолчанию:

введите здесь описание изображения

и это дает пользователю возможность выбрать Готово || Открыть, и, конечно же, если пользователь выберет Готово, это приведет к закрытию окна, а приложение уже закрыто, поскольку оно обновляется, поэтому пользователь переходит к системный интерфейс, который вообще не приветствуется.

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

  1. Принудительно открывать приложение по умолчанию после завершения установки.

  2. Измените экран завершения установки системы или переопределите действия кнопок.


person Muhammed Refaat    schedule 10.01.2016    source источник
comment
В моем приложении не отображается диалоговое окно «Готово/Открыть». У вас есть идея?   -  person A1ucard    schedule 25.09.2017


Ответы (2)


Я, наконец, решил проблему, я использовал следующий приемник в стороннем приложении:

    <receiver
        android:name="com.example.extraApp.InstallReceiver"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.PACKAGE_INSTALL" />
            <action android:name="android.intent.action.PACKAGE_ADDED" />
            <data android:scheme="package"/>
        </intent-filter>
    </receiver>

и это приложение всегда работает, и оно не содержит ничего, кроме того приемника, который после запуска (при обновлении исходного приложения) я использую имя пакета для запуска исходного приложения:

public class InstallReceiver extends BroadcastReceiver{    
    @Override
    public void onReceive(Context context, Intent intent) {
        try {
            Intent new_intent = context.getPackageManager().getLaunchIntentForPackage("com.example.updaterjschtest");
            context.startActivity(new_intent);
        } catch (Exception e) {
            e.printStackTrace();
        }   
    }
}

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

person Muhammed Refaat    schedule 10.01.2016

Я бы предложил install_referrer (ссылка)

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

Я никогда не использовал и не тестировал этот подход, но он должен быть выполним.

person sschrass    schedule 10.01.2016
comment
О, я вижу. Без участия Google Play. - person sschrass; 10.01.2016
comment
к сожалению, в моем случае это не поможет › Намерение Google Play com.android.vending.INSTALL_REFERRER передается при установке приложения из Google Play Store. как вы сказали, Google-Play не задействован - person Muhammed Refaat; 10.01.2016
comment
Я успешно нашел решение проблемы, если вам интересно узнать. - person Muhammed Refaat; 10.01.2016
comment
com.android.vending.INSTALL_REFERRER транслируется через ‹s›Market‹/s› Play Store после установки, но только когда конечный пользователь нажимает кнопку OPEN. - person Alex Cohn; 22.12.2016