首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xamarin.Droid或Xamarin.iOS类的实例化

Xamarin.Droid或Xamarin.iOS类的实例化
EN

Stack Overflow用户
提问于 2015-08-20 11:59:33
回答 1查看 306关注 0票数 2

我是Xamarin的新手,我想在我的Xamarin.Forms应用程序中编写一个通用的跨平台代码,用于调用Xamarin.Droid或Xamarin.iOS中的平台特定实现。这个平台的具体实现是为了使用平台的定位服务。

为此,我在我的ILocationTracker项目中定义了一个名为Xamarin.Forms的接口,如下所示:

代码语言:javascript
复制
public interface ILocationTracker
    {
        void Connect();

        void Disconnect();

        void startReceivingLocationUpdates(int priority, int fastestInterval, int interval);

    }

我在我的Xamarin.Droid项目文件夹中写下了一个名为Xamarin.Droid的类,该文件夹实现了ILocationTracker接口,并遵循了特定于ILocationTracker平台的接口:

  1. IGooglePlayServicesClientConnectionCallbacks,
  2. IGooglePlayServicesClientOnConnectionFailedListener,
  3. Android.Gms.Location.ILocationListener

对于Android特定的实现,我引用以下链接:location/location/

为了实例化类,我在MyView.xaml.cs中执行以下操作,它位于Xamarin.Forms文件夹中:

代码语言:javascript
复制
    if (Device.OS == TargetPlatform.Android) {
                    var type = Type.GetType("MyProjectName.Droid.AndroidLocationTracker");
                    tracker = (ILocationTracker)Activator.CreateInstance(type);
}

但是,我得到了运行时错误

java.lang.reflect.InvocationTargetException

有人能帮我吗,如何调用平台特定的类?我是不是遗漏了什么?还是我走错路了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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>()在共享代码中创建新实例。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32117698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档