Android 11 – необходима помощь в использовании PackageManager для автоматической установки APK от имени владельца устройAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Android 11 – необходима помощь в использовании PackageManager для автоматической установки APK от имени владельца устрой

Сообщение Anonymous »

Мое приложение — это программа запуска и приложение администратора/владельца устройства.
В настоящее время в качестве демонстрационной версии я пытаюсь загрузить APK-файл Wireguard и установить его автоматически с помощью приведенного ниже кода. Однако adb logcat показывает ошибки
12-18 11:33:12.792 9785 9825 D APKЗагрузка: APK загружен в /storage/emulated/0/Android/data/com.example.myapplication/files /Download/wireguard.apk
12-18 11:33:13.701 9785 9825 E APKInstallError: на com.example.myapplication.MainActivity.installAPK(MainActivity.kt:254)
12-18 11:33:13.701 9785 9825 E APKInstallError: at com.example.myapplication.MainActivity.downloadAndInstallAPK$lambda$3(MainActivity.kt:209)
12-18 11:33:13.701 9785 9825 E APKInstallError: at com.example.myapplication.MainActivity.$r8$lambda$7V-msg0KHXrPMcl9_lfTIQBMiZE(Неизвестный источник:0)
12-18 11:33:13.701 9785 9825 E APKInstallError: at com.example.myapplication.MainActivity$$ExternalSyntheticLambda3.run(D8$$SyntheticClass:0)
и на экране появится всплывающее сообщение
(не удалось записать: ebadf (неправильный дескриптор файла). Может ли кто-нибудь помочь мне определить, почему я получаю эту ошибку.
в настоящее время мне нужно, чтобы это работало на Android 11
private fun downloadAndInstallAPK(urlString: String) {
Thread {
try {
val url = URL(urlString)
val connection = url.openConnection() as HttpURLConnection
connection.requestMethod = "GET"
connection.connect()

val inputStream = connection.inputStream
val file = File(getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS), "wireguard.apk")
val fileOutputStream = FileOutputStream(file)

val buffer = ByteArray(1024)
var length: Int
while (inputStream.read(buffer).also { length = it } != -1) {
fileOutputStream.write(buffer, 0, length)
}

fileOutputStream.close()
inputStream.close()

Log.d("APKDownload", "APK downloaded to ${file.absolutePath}")
// Install the APK
installAPK(file)

} catch (e: Exception) {
e.printStackTrace()
runOnUiThread {
Toast.makeText(this, "Error downloading APK: ${e.message}", Toast.LENGTH_LONG).show()
}
}
}.start()
}

private fun installAPK(file: File) {

val packageInstaller = packageManager.packageInstaller

try {
val params = PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL)
val sessionId = packageInstaller.createSession(params)

// Open the session
val session = packageInstaller.openSession(sessionId)

// Open the output stream to write the APK into the session
val out = session.openWrite("wireguard.apk", 0, -1)

// Copy APK data from input to session
val inputStream = FileInputStream(file)
val buffer = ByteArray(1024)
var length: Int
while (inputStream.read(buffer).also { length = it } != -1) {
out.write(buffer, 0, length)
}
inputStream.close()
out.close()

// Prepare the IntentSender for installation completion callback
val intent = Intent("com.example.myapplication.ACTION_INSTALL_COMPLETE")
val pendingIntent = PendingIntent.getBroadcast(
this,
0,
intent,
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
)

// Commit the session
session.fsync(out)
session.commit(pendingIntent.intentSender)

// Inform user
runOnUiThread {
Toast.makeText(this, "App installation initiated", Toast.LENGTH_SHORT).show()
}

} catch (e: Exception) {
Log.e("APKInstallError", "Error during APK installation: ${e.message}", e)
runOnUiThread {
Toast.makeText(this, "Error installing APK: ${e.message}", Toast.LENGTH_LONG).show()
}
}
}


Android Manifest.
`




























































Подробнее здесь: https://stackoverflow.com/questions/792 ... -deviceown
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»