Я создал новый проект и начал работать над ним, когда заметил, что Intent.ACTION_INSTALL_PACKAGE устарела в API 29
Документы Google просто заявляют: эта константа устарела на уровне 29 API. Вместо этого используйте PackageInstaller
Документы здесь: https://developer.android.com/reference/kotlin/android/content/pm/PackageInstaller
Единственный вопрос переполнения стека здесь Как установить / обновить / удалить APK с помощью класса PackageInstaller в Android L ?
в настоящее время я загружаю через DownloadManager, а затем поочередно устанавливаю с приемником вещания.
Есть ли способ использовать этот приемник вещания, чтобы также использовать PackageInstaller? Или я должен проверить версию APK> = 29 и написать для нее совершенно новое решение ... Простые ответы в Kotlin предпочтительнее
Вот мой текущий код
//download function
val downloadManager = getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager
val uri = Uri.parse(link)
val request = DownloadManager.Request(uri)
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI or DownloadManager.Request.NETWORK_MOBILE)
request.setTitle("myapp.apk")
request.setDestinationUri(Uri.fromFile(toDelete))
val reference: Long = downloadManager.enqueue(request)
private val receiveDownload = object : BroadcastReceiver(){
override fun onReceive(context: Context?, inten: Intent?) {
/* Install the latest version */
val downloadFolder: File? = if (android.os.Build.VERSION.SDK_INT >= 19) {
getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)
} else {
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
}
val int: Intent
val toInstall = File(downloadFolder, "/myapp.apk")
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
val apkUri = FileProvider.getUriForFile(
this@Login,
BuildConfig.APPLICATION_ID + ".fileprovider", toInstall)
int = Intent(Intent.ACTION_INSTALL_PACKAGE)
int.data = apkUri
int.flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
} else {
val apkUri = Uri.fromFile(toInstall)
int = Intent(Intent.ACTION_VIEW)
int.setDataAndType(apkUri, "application/vnd.android.package-archive")
int.flags = Intent.FLAG_ACTIVITY_NEW_TASK
}
runOnUiThread {
startActivity(int)
}
}
}