Android 13(软件开发工具包33):不赞成使用getPackageInfo(String,int),有什么替代方法吗?

mwecs4sa  于 2022-12-09  发布在  Android
关注(0)|答案(2)|浏览(800)

从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)
    }
}
woobm2wo

woobm2wo1#

这就是现在的情况吗?
是的,尽管我已经放弃了使用TIRAMISU的做法,而改用实际的底层Int
理想情况下,谷歌会为PackageManagerCompat添加一些东西来实现这些变化,也许现在Android 13已经开始向用户发货了。

q8l4jmvw

q8l4jmvw2#

如果你正在使用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)或添加另一个标志(如果需要)。

相关问题