是否可以使用特定于平台的代码:
#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?
答案 0 :(得分:0)
是的,在回答你的问题时,这是可能的。共享项目获得引用它们的项目的任何引用。否则它将无法编译。您的代码中必定存在逻辑错误。
从您的代码中我怀疑Context.LocationService的值是LocationManager,并且对DependencyService的调用没有解析它。为什么发生这种情况与使用共享项目没有直接关系,而是需要调试的东西。
此外,根据您的代码,您可以利用#elif IOS 而不是单独的#endif和#if IOS 语句,但这更像是组织偏好。