从 API 级别 33 开始,PackageManager 类的
getPackageInfo(String, int)
方法已弃用。文档建议使用 getPackageInfo(String, PackageInfoFlags)
代替。但该功能仅适用于 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,您可以向您的项目添加扩展功能:
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
。
理想情况下,Google 会在
PackageManagerCompat
中添加内容以应对这些变化,也许他们现在会这样做,因为 Android 13 已开始向用户交付。