[英]Xamarin shared projects - use platform specific services/APIs
是否可以使用像这样的平台特定代码:
#if __ANDROID__
using Android.App;
using Android.Content;
using Android.Locations;
#endif
public GPSNavigation()
{
#if __ANDROID__
manager = (LocationManager)DependencyService.Get<Activity>().GetSystemService(Context.LocationService);
Criteria criteria = new Criteria
{
Accuracy = Accuracy.Fine
};
IList<string> acceptableLocationProviders = manager.GetProviders(criteria, true);
if (acceptableLocationProviders.Any())
{
locationProvider = acceptableLocationProviders.First();
}
else
{
locationProvider = "";
}
#endif
#if __IOS__
#endif
}
该代码可以编译并运行,但是在执行时,对于所有特定于Android的代码,例如“未知标识符:LocationManager”,我都会收到“未知标识符:”的运行时错误。 是否不可能在共享项目中引用平台特定的服务/ API?
是的,回答您的问题,这是可能的。 共享项目获得引用他们的项目所拥有的所有引用。 否则它将无法编译。 您的代码中必须存在逻辑错误。
从您的代码中,我怀疑Context.LocationService的值是LocationManager,并且对DependencyService的调用无法解析它。 发生这种情况的原因与使用共享项目并不直接相关,而是需要调试的东西。
此外,根据您的代码,您也许可以利用#elif IOS而不是单独的#endif和#if IOS语句,但这更多是组织上的偏爱。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.