[英]Android 13 (SDK 33): Bundle.getSerializable(String) is deprecated, what is alternative?
[英]Android 13 (SDK 33): PackageManager.getPackageInfo(String, int) deprecated. what is the alternative?
从 API 级别 33 开始,不推荐使用 PackageManager class 的getPackageInfo(String, int)
方法。 文档建议改用getPackageInfo(String, PackageInfoFlags)
。 但是那个 function 只能从 API 级别 33 获得。
我当前的代码:
val pInfo = context.packageManager.getPackageInfo(context.packageName, 0)
现在应该是这样吗?
val pInfo = context.getPackageInfo()
@Suppress("DEPRECATION")
fun Context.getPackageInfo(): PackageInfo {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
packageManager.getPackageInfo(packageName, PackageManager.PackageInfoFlags.of(0))
} else {
packageManager.getPackageInfo(packageName, 0)
}
}
如果您使用的是 Kotlin,则可以将扩展名 function 添加到您的项目中:
fun PackageManager.getPackageInfoCompat(packageName: String, flags: Int = 0): PackageInfo =
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
getPackageInfo(packageName, PackageManager.PackageInfoFlags.of(flags.toLong()))
} else {
@Suppress("DEPRECATION") getPackageInfo(packageName, flags)
}
如果需要,只需调用packageManager.getPackageInfoCompat(packageName)
或添加另一个标志。
这是现在应该的样子吗?
是的,尽管我已经摆脱了使用TIRAMISU
来支持实际底层Int
的做法。
理想情况下,谷歌会为这些变化添加一些东西到PackageManagerCompat
,也许他们现在会因为 Android 13 开始向用户发货。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.