1

我的应用程序 minSdkVersion 为 19,应用程序使用以下代码安装 3rd 方应用程序,

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 是用于安装 3rd 方应用程序的新 API,但PackageInstaller是在 API 级别 21 中添加的。

有什么方法可以使用低于 API 级别 21 的 PackageInstaller?如何在 Android 10 中安装 3rd 方应用程序?

4

1 回答 1

1

为了集成这两个 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在该页面上搜索。

于 2020-06-22T08:45:52.150 回答