Xamarin共享项目 - 使用特定于平台的服务/ API

时间:2015-04-03 17:43:00

标签: c# visual-studio-2013 xamarin

是否可以使用特定于平台的代码:

#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?

1 个答案:

答案 0 :(得分:0)

是的,在回答你的问题时,这是可能的。共享项目获得引用它们的项目的任何引用。否则它将无法编译。您的代码中必定存在逻辑错误。

从您的代码中我怀疑Context.LocationService的值是LocationManager,并且对DependencyService的调用没有解析它。为什么发生这种情况与使用共享项目没有直接关系,而是需要调试的东西。

此外,根据您的代码,您可以利用#elif IOS 而不是单独的#endif和#if IOS 语句,但这更像是组织偏好。