我是Xamarin的新手,我想在我的Xamarin.Forms应用程序中编写一个通用的跨平台代码,用于调用Xamarin.Droid或Xamarin.iOS中的平台特定实现。这个平台的具体实现是为了使用平台的定位服务。
为此,我在我的ILocationTracker项目中定义了一个名为Xamarin.Forms的接口,如下所示:
public interface ILocationTracker
{
void Connect();
void Disconnect();
void startReceivingLocationUpdates(int priority, int fastestInterval, int interval);
}我在我的Xamarin.Droid项目文件夹中写下了一个名为Xamarin.Droid的类,该文件夹实现了ILocationTracker接口,并遵循了特定于ILocationTracker平台的接口:
对于Android特定的实现,我引用以下链接:location/location/
为了实例化类,我在MyView.xaml.cs中执行以下操作,它位于Xamarin.Forms文件夹中:
if (Device.OS == TargetPlatform.Android) {
var type = Type.GetType("MyProjectName.Droid.AndroidLocationTracker");
tracker = (ILocationTracker)Activator.CreateInstance(type);
}但是,我得到了运行时错误
java.lang.reflect.InvocationTargetException
有人能帮我吗,如何调用平台特定的类?我是不是遗漏了什么?还是我走错路了?
发布于 2015-08-20 12:13:37
在平台特定的代码中创建特定于平台的服务(在您的例子中是AndroidLocationTracker)。转到Android项目并创建实例,例如在MainActivity.cs文件中。在依赖项注入容器中注册实例。使用这种技术,您不再需要像现在使用if (Device.OS == TargetPlatform.Android) {}那样要求当前的平台。
常见的容器是Mvx,并附带MVVMCross (https://github.com/MvvmCross/MvvmCross/wiki/Service-Location-and-Inversion-of-Control)。
Xamarin.Forms带来了自己的DependencyService (http://developer.xamarin.com/guides/cross-platform/xamarin-forms/dependency-service/)。您可以在文档中找到类注册的示例。您可以通过DependencyService.Get<ILocationTracker>()在共享代码中创建新实例。
https://stackoverflow.com/questions/32117698
复制相似问题