Android Kotlin中getPackageInfo已废弃,求替代方案?
替代废弃的
getPackageInfo方法判断应用是否安装 从Android API 33(Tiramisu)开始,PackageManager.getPackageInfo(String, int)方法被废弃,官方推荐使用接收PackageManager.PackageInfoFlags参数的重载方法替代。
以下是适配新旧API版本的Kotlin实现代码:
protected fun isPackageInstalled(packageName: String?): Boolean { packageName ?: return false return try { val packageManager = application.packageManager if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { packageManager.getPackageInfo(packageName, PackageManager.PackageInfoFlags.of(0)) } else { @Suppress("DEPRECATION") packageManager.getPackageInfo(packageName, 0) } true } catch (e: PackageManager.NameNotFoundException) { false } }
关键说明:
- 先对
packageName做空值判断,替代原代码中的!!强制非空,避免空指针异常 - API 33及以上版本使用
PackageInfoFlags.of(0)构建flags参数,对应原方法中0的含义(不请求额外包信息) - 低版本保留原废弃方法,添加
@Suppress("DEPRECATION")注解消除编译器警告
内容的提问来源于stack exchange,提问作者Eduard Unruh
相关产品推荐
相关产品推荐

