Xamarin - Android 13(SDK 33):PackageManager.GetPackageInfo(String,int)已过时,还有什么选择呢?

pgpifvop  于 2023-10-14  发布在  Android
关注(0)|答案(1)|浏览(209)

这个问题here描述了我的问题,除了我正在使用Xamarin。
更新:为了清楚起见,我看到的问题是下面列出的第一个调用不会在Xamarin中编译为最新的SDK。第二个崩溃的任何Android构建少于13。我必须支持版本回到9,所以我需要一种方法来检测软件包,工作在所有版本,因为9。
CALL 1:针对Android 13时无法编译

packageinfo = PackageManager.GetPackageInfo(PackageName, 0);

CALL 2:在任何Android版本低于13崩溃

packageinfo = PackageManager.GetPackageInfo(PackageName, PackageManager.PackageInfoFlags.Of(0));

链接问题通过抑制机制解决问题:

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

这个问题是,这可以在Xamarin中通过条件编译来实现吗?
SDK的“if”检查不起作用,因为包含弃用代码的块将无法编译。
如果没有,是否有其他方法可以检测到一个软件包,在13和前13工作?

5vf7fwbs

5vf7fwbs1#

在Xamarin中,您可以尝试以下代码:

PackageInfo packageinfo;
if(Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.Tiramisu)
{
   packageinfo = PackageManager.GetPackageInfo(PackageName, PackageManager.PackageInfoFlags.Of(0));
}
else
{
   packageinfo = PackageManager.GetPackageInfo(PackageName, 0);
}

相关问题