PackageInstaller возвращает INSTALL_FAILED_INTERNAL_ERROR: разрешение отклонено

У меня есть приложение с разрешениями владельца устройства, и я пытаюсь установить другое приложение в автоматическом режиме. Я использую для этого PackageInstaller API и файл apk, который находится в папке с моими активами. он работает хорошо, но возвращает намерение со STATUS_FAILURE и сообщением INSTALL_FAILED_INTERNAL_ERROR: разрешение отклонено.

Я последовал этому ответу, чтобы написать свой класс 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

Сеансы могут устанавливать новые приложения, обновлять существующие приложения или добавлять новые разделы в существующее приложение.

поэтому у меня должны быть разрешения.

Любые идеи, почему я получаю эту ошибку? Спасибо.


person AyTee    schedule 04.04.2019    source источник
comment
а какой у тебя аппарат? потому что, если xiaomi, MIUI заблокирует этот установщик, вы можете увидеть здесь: в .c.mi.com/thread-2145537-1-0.html   -  person Vahab Ghadiri    schedule 27.05.2020