Xamarin Forms开发安卓启动器添加Intent Filter报静态成员访问错误如何解决
问题原因
你遇到的编译错误是因为MainActivity继承的FormsAppCompatActivity基类(本质是Android的Activity类)本身包含一个名为Intent的实例属性,用于获取启动当前Activity的Intent实例。你在特性中直接写Intent.ActionMain时,编译器会优先将Intent解析为这个实例属性,而ActionMain是Android.Content.Intent类的静态常量,自然无法通过实例对象访问,就抛出了对应错误。
解决方案
方案1:直接使用完整类型限定名(推荐,无需额外引入命名空间)
把IntentFilter中所有Intent前缀替换为完整命名空间Android.Content.Intent即可,修改后的IntentFilter特性代码如下:
[IntentFilter(new[] { Android.Content.Intent.ActionMain }, Categories = new[] { Android.Content.Intent.CategoryHome, Android.Content.Intent.CategoryDefault })]
方案2:使用命名空间别名
在MainActivity.cs文件的顶部添加别名引用:
using Intent = Android.Content.Intent;
之后原有的IntentFilter代码不需要修改,编译器会优先识别你定义的别名指向类型。
修改后完整代码参考
namespace Launcher.Droid { [Activity(Label = "Launcher", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize)] // 这里已经替换为带完整命名空间的写法 [IntentFilter(new[] { Android.Content.Intent.ActionMain }, Categories = new[] { Android.Content.Intent.CategoryHome, Android.Content.Intent.CategoryDefault })] public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity { protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); Xamarin.Essentials.Platform.Init(this, savedInstanceState); global::Xamarin.Forms.Forms.Init(this, savedInstanceState); LoadApplication(new App()); } public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults) { Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults); base.OnRequestPermissionsResult(requestCode, permissions, grantResults); } } }
内容的提问来源于stack exchange,提问作者Oli
相关产品推荐
相关产品推荐

