Есть ли способ использовать PackageInstaller ниже уровня API 21? - PullRequest
0 голосов
/ 21 июня 2020

Мое приложение minSdkVersion - 19, и приложение устанавливает стороннее приложение, используя следующий код:

Intent intent = Intent(android.content.Intent.ACTION_VIEW);
intent.setDataAndType(android.net.Uri.fromFile(new java.io.File(APK_PATH)),
                        "application/vnd.android.package-archive");
intent.setFlags(android.content.Intent.FLAG_ACTIVITY_NEW_TASK);

Я добавил разрешение в файле манифеста,

<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>

Приведенный выше код работает хорошо до android версии 9, но в Android 10 не работает и логов не найдено. Я просмотрел некоторые документы, ACTION_VIEW или ACTION_INSTALL_PACKAGE устарели на Android 10. PackageInstaller - это новый API для установки сторонних приложений, но PackageInstaller добавлен на уровне API 21.

Is есть ли способ использовать PackageInstaller ниже уровня API 21? Как установить стороннее приложение в Android 10 ??

1 Ответ

0 голосов
/ 22 июня 2020

Чтобы интегрировать оба API, вы можете использовать простой оператор if, который решает, какой API вы должны использовать.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.L) {
    // use PackageInstaller. No errors, no exceptions 
} else {
    Intent intent = Intent(android.content.Intent.ACTION_VIEW);
    intent.setDataAndType(android.net.Uri.fromFile(new java.io.File(APK_PATH)),
                        "application/vnd.android.package-archive");
    intent.setFlags(android.content.Intent.FLAG_ACTIVITY_NEW_TASK);
}

Build.VERSION.SDK_INT - это номер SDK, который используется на устройстве, на котором находится ваше приложение.

Build.VERSION_CODES.L - постоянное значение:

/**
 * Temporary until we completely switch to {@link #LOLLIPOP}.
 * @hide
 */
public static final int L = 21;

Это официальный способ устранения различий в SDK. Вот пример из Android документации. Найдите на этой странице >= Build.VERSION_CODES.

...