Мое приложение — это программа запуска и приложение администратора/владельца устройства.
В настоящее время в качестве демонстрационной версии я пытаюсь загрузить 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
Android 11 – необходима помощь в использовании PackageManager для автоматической установки APK от имени владельца устрой ⇐ Android
Форум для тех, кто программирует под Android
1734556057
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.
`
Подробнее здесь: [url]https://stackoverflow.com/questions/79292481/android-11-help-neded-to-use-packagemanager-to-silent-install-apk-as-deviceown[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия