Обновление приложения через APK скачать (с URL), не показывая Open/Done Screen

Я пытаюсь добавить опцию update приложение, загрузив apk, его установка успешно установлена. Но проблема в том, что приложение было закрыто после установки, не запрашивая экран Open/Done в Nougat и выше устройствах.

Я пытался использовать оба ACTION_VIEW а также ACTION_INSTALL_PACKAGE, но не повезло. Также пробовал с startActivityForResult вместо startActivity все еще не повезло.

public void installAPK() {
        Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
        File file = new File(path + "update.apk");

        if (Build.VERSION.SDK_INT < 24) {
            intent.setDataAndType(Uri.fromFile(new File(path + "update.apk")), "application/vnd.android.package-archive");
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // without this flag android returned a intent error!
        } else {

            Uri apkURI = FileProvider.getUriForFile(
                    activity,
                    activity.getApplicationContext()
                            .getPackageName() + ".provider", file);
            intent.setDataAndType(apkURI, "application/vnd.android.package-archive");
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        }
        intent.putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true);
        activity.startActivityForResult(intent, RC_INSTALL_APK);
    }

Что я пропустил?

1 ответ

Решение

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

 void OpenNewVersion(String location) {
    Intent downloadIntent;
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        String PATH = Environment.getExternalStorageDirectory() + "/Download/";

        File fileLocation = new File(PATH, "app-stock.apk");
        Uri apkUri = FileProvider.getUriForFile(this,  "Adapters.GenericFileProvider", fileLocation);

        downloadIntent = new Intent(Intent.ACTION_VIEW);
        downloadIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        downloadIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        downloadIntent.setDataAndType(apkUri, "application/vnd.android.package-archive");

        List<ResolveInfo> resInfoList = this.getPackageManager().queryIntentActivities(downloadIntent, PackageManager.MATCH_DEFAULT_ONLY);
        for (ResolveInfo resolveInfo : resInfoList) {
            String packageName = resolveInfo.activityInfo.packageName;
            this.grantUriPermission(packageName, apkUri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
        }

    } else {
        File fileLocation = new File(this.getFilesDir(), "app-stock.apk");
        downloadIntent = new Intent(Intent.ACTION_VIEW);
        downloadIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        downloadIntent.setDataAndType(Uri.fromFile(fileLocation), "application/vnd.android.package-archive");
    }
    this.startActivity(downloadIntent);

}
Другие вопросы по тегам