Android 13 (SDK 33):PackageManager.getPackageInfo(String, int) 已弃用。有什么替代方案?

问题描述 投票:0回答:3

从 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)
    }
}
android android-context package-info
3个回答
60
投票

如果您使用 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)
或添加另一个标志即可。


21
投票

现在应该是这样吗?

是的,尽管我已经放弃使用

TIRAMISU
的做法,转而使用实际底层
Int

理想情况下,Google 会在

PackageManagerCompat
中添加内容以应对这些变化,也许他们现在会这样做,因为 Android 13 已开始向用户交付。


0
投票

有时,当您使用较低版本的 gradle(例如 6.9 或更低版本)并且在您的 android studion 中配置了最新的 java sdk 时,您会看到此类问题。 所以要解决这个问题,只需从 android studio 降低你的 java 版本即可。 屏幕截图:

© www.soinside.com 2019 - 2024. All rights reserved.