繁体   English   中英

Android 13 (SDK 33):不推荐使用 PackageManager.getPackageInfo(String, int)。 有什么选择?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM