我有多种partial class DeviceServices
的实现,为Android、iOS等平台提供某些设备或操作系统特定功能的特定实现。我的应用程序针对API级别33.0进行定位,最低版本是API级别21.0。
某些API仅适用于某些较高的Android版本,因此我希望确保它们仅在支持的版本上调用。然而,无论使用何种API(取决于正在使用的API),我总是收到以下警告:
警告CA1416:此调用站点在可达的版本“Android” 21.0及更高版本上可达。“WindowInsets.Type.SystemBars()”仅支持“android” 30.0及更高版本。
以下代码可在所有我尝试过的设备和仿真器上隐藏和显示系统栏,但我担心早期的Android版本。尽管检查了正确的目标API版本,但我仍然收到上述警告:
static partial class DeviceServices
{
private static Activity _activity;
public static void SetActivity(Activity activity)
{
_activity = activity;
}
public static partial void HideSystemControls()
{
#if ANDROID30_0_OR_GREATER
if (Build.VERSION.SdkInt >= BuildVersionCodes.R) //R == API level 30.0
{
_activity?.Window?.InsetsController?.Hide(WindowInsets.Type.SystemBars());
}
#endif
}
public static partial void ShowSystemControls()
{
#if ANDROID30_0_OR_GREATER
if (Build.VERSION.SdkInt >= BuildVersionCodes.R) //R == API level 30.0
{
_activity?.Window?.InsetsController?.Show(WindowInsets.Type.SystemBars());
}
#endif
}
}
那么,正确的方法是什么?我不确定该如何继续。我以前多次使用特定于平台的API,并且从未遇到任何问题,但这个警告让我担忧。我已经查看了有关此警告的支持文章,但我并没有觉得它很有用:https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/ca1416。我也不想抑制警告。也许我在这里漏掉了什么,或者在这种情况下我可以简单地忽略警告吗?
更新:
我正在使用Visual Studio 2022 17.4 Preview 2.1和.NET 7.0 RC1。
我还尝试直接从
MainActivity
中调用API,但在重新构建后仍然收到相同的警告。第二次更新: 这里是一个示例存储库,可以重现该问题,只需取消注释MainActivity.cs文件中的以下代码块:
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
//#if ANDROID30_0_OR_GREATER
// if (Build.VERSION.SdkInt >= BuildVersionCodes.R) //R == API level 30.0
// {
// Window?.InsetsController?.Hide(WindowInsets.Type.SystemBars());
// }
//#endif
}