Xamarin:我应该分配给" context&#34 ;?

时间:2017-03-26 18:39:34

标签: android xamarin xamarin.android

我得到了这段代码

public void TestGPS()
{
    Context context;
    var locationManager = context.GetSystemService(Context.LocationService) as LocationManager;
    locationManager.AddTestProvider("Test", false, false, false, false, false, false, false, Power.Low, Android.Hardware.SensorStatus.AccuracyHigh);
    locationManager.SetTestProviderEnabled("Test", true);
}

现在,我无法调试我的代码,因为编译器将上下文标记为"未分配"。 但是我会将上下文分配给哪些人?

谢谢! :)

1 个答案:

答案 0 :(得分:2)

传递/需要Context在Android中很常见。

通常这意味着您必须传递对当前活动的引用。这将是this内部任何活动,this.Context内部片段。

如果要在一些没有关于UI /活动的线索的服务中使用此代码,常见的建议是将上下文传递给服务初始化,然后存储对此上下文的引用。要小心,因为这可能会导致内存泄漏(您将存储对活动的引用并保持活动)。

或者,您可以使用所谓的当前上下文:Android.App.Application.Context

在您的情况下,如果这是活动代码的一部分,您必须将其更改为:

public void TestGPS()
{
    var locationManager = this.GetSystemService(Context.LocationService) as LocationManager;
    locationManager.AddTestProvider("Test", false, false, false, false, false, false, false, Power.Low, Android.Hardware.SensorStatus.AccuracyHigh);
    locationManager.SetTestProviderEnabled("Test", true);
}

如果这是服务的一部分(非UI),那么:

public void TestGPS()
{
    var context = Android.App.Application.Context;
    var locationManager = context.GetSystemService(Context.LocationService) as LocationManager;
    locationManager.AddTestProvider("Test", false, false, false, false, false, false, false, Power.Low, Android.Hardware.SensorStatus.AccuracyHigh);
    locationManager.SetTestProviderEnabled("Test", true);
}

关于这个主题的一些好文章:

Xamarin: Android Activities, Context, Intents and Views

What is Context on Android