首页 > 解决方案 > PackageInstaller 返回 INSTALL_FAILED_INTERNAL_ERROR:权限被拒绝

问题描述

我有一个具有设备所有者权限的应用程序,我正在尝试静默安装另一个应用程序。我为此使用 PackageInstaller API 和我的资产文件夹中的 apk 文件。它运行良好,但返回一个带有 STATUS_FAILURE 和消息 INSTALL_FAILED_INTERNAL_ERROR: Permission Denied 的意图。

我按照这个答案编写了我的 AppInstaller 类:

class AppInstaller {

companion object {
    const val ACTION_INSTALL_COMPLETE = "my.package.name.INSTALL_COMPLETE"
}

@Throws(IOException::class)
fun installPackage(context: Context, fileName: String, packageName: String): Boolean {
    val input = context.assets.open(fileName)
    val packageInstaller = context.packageManager.packageInstaller
    val params = PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL)
    params.setAppPackageName(packageName)
    // set params
    val sessionId = packageInstaller.createSession(params)
    val session = packageInstaller.openSession(sessionId)
    val out = session.openWrite("DPC", 0, -1)
    val buffer = ByteArray(65536)
    var c = input.read(buffer)
    while (c != -1) {
        out.write(buffer, 0, c)
        c = input.read(buffer)
    }

    session.fsync(out)
    input.close()
    out.close()

    session.commit(createIntentSender(context, sessionId))
    return true
}

private fun createIntentSender(context: Context, sessionId: Int): IntentSender {
    val pendingIntent = PendingIntent.getBroadcast(context, sessionId, Intent(ACTION_INSTALL_COMPLETE), 0)
    return pendingIntent.intentSender
}
}

我尝试了有和没有这些权限:

<uses-permission android:name="android.permission.INSTALL_PACKAGES" tools:ignore="ProtectedPermissions"/>
<uses-permission android:name="android.permission.DELETE_PACKAGES" tools:ignore="ProtectedPermissions"/>
<uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES"/>
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>

这段代码的结果是真的

dpm.isDeviceOwnerApp("my.package.name")

通过这个 aosp 代码android 文档中的描述:

提交可能需要用户干预才能完成安装,除非调用者属于以下类别之一,在这种情况下,安装将自动完成。

设备所有者

附属的个人资料所有者

设备所有者使用 DevicePolicyManager.DELEGATION_PACKAGE_INSTALLATION 委托应用程序

会话可以安装全新的应用程序、升级现有应用程序或将新拆分添加到现有应用程序中。

所以我应该有权限。

任何想法为什么我会收到此错误?谢谢。

标签: androidandroid-for-work

解决方案


推荐阅读