Не могу обновить приложение без спроса пользователя, приложение является системным и вшито в прошивку в system/priv-app/. Как пробовал:
var destination = Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
.toString() + "/"
val fileName = "${updater!!.appName}.apk"
destination += fileName
val file = File(destination)
if (file.exists()) {
try {
val command = "su pm install -r ${file.absolutePath}\n"
val proc = Runtime.getRuntime().exec(command)
val stdError = BufferedReader(InputStreamReader(proc.errorStream))
var s = "123"
while (!s.isEmpty()) {
Log.d(Tags.TEST, s)
Toaster.showError(this, s, Toast.LENGTH_LONG)
s = stdError.readLine()
}
proc.waitFor()
Toaster.showError(this, "Success", Toast.LENGTH_LONG)
} catch (e: Exception) {
e.printStackTrace()
Toaster.showError(this, e.localizedMessage, Toast.LENGTH_LONG)
}
} else {
Toaster.showError(this, "No file", Toast.LENGTH_LONG)
}
Возникает исключение: Cannot run programm "su": error=13, Permission Denied. Если использовать
val command = "pm install -r ${file.absolutePath}\n"
, то отлавливается в errorStream
сообщение о неправильном юзере, цитирую:
Error: java.lang.SecurityException:Premission Denial: runInstallCreate from pm command asks to run as user -1 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL
Пермишены из манифеста:
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS"/>
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.DELETE_PACKAGES" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.REBOOT" />
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL"/>
<uses-permission android:name="android.permission.WAKE_LOCK" />
При этом, к примеру, перезагрузка телефона из приложения без спроса пользователя работает (через PowerManager
)
val pm = getSystemService(Context.POWER_SERVICE) as PowerManager
pm.reboot(null)
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Написать алгоритм, который используя числа 1, 3, 4, 6, а также умножение, деление, сложение, вычитание и скобки, находит все комбинации для получения...
Как организовать в настройках приложения функцию скрыть/показать textviewПытался с помощью SharedPreferences, но так и понял
Хотите улучшить этот вопрос? Update the question so it's on-topic for Stack Overflow на русском
Есть такая задача: найти максимальную последовательность единиц в матрицеПоследовательность может быть как горизонтальной так и вертикальной