繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM