2015-04-03 92 views
0

是否可以使用特定於平臺的代碼如下所示:Xamarin共享項目 - 利用平臺的具體服務/ API的

#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

是的,在回答你的問題時,這是可能的。共享項目獲取引用它們的項目的任何引用。否則它不會編譯。您的代碼中必須有邏輯錯誤。

從您的代碼我懷疑Context.LocationService的值是LocationManager和對DependencyService的調用不解決它。爲什麼發生這種情況與使用共享項目沒有直接關係,而是需要調試的東西。

此外,根據你的代碼,你可能能夠採取#elif指令IOS,而不是單獨的#ENDIF優勢和#如果IOS語句但更多的是一個組織的偏好。