Android 沙马林:我应该分配给什么;上下文;?
我有这段代码Android 沙马林:我应该分配给什么;上下文;?,android,xamarin,xamarin.android,Android,Xamarin,Xamarin.android,我有这段代码 public void TestGPS() { 语境; var locationManager=context.GetSystemService(context.LocationService)作为locationManager; locationManager.AddTestProvider(“Test”,false,false,false,false,false,Power.Low,Android.Hardware.SensorStatus.AccuracyHigh); loc
public void TestGPS()
{
语境;
var locationManager=context.GetSystemService(context.LocationService)作为locationManager;
locationManager.AddTestProvider(“Test”,false,false,false,false,false,Power.Low,Android.Hardware.SensorStatus.AccuracyHigh);
locationManager.SetTestProviderEnabled(“测试”,true);
}
现在,我无法调试代码,因为编译器将上下文标记为“未分配”。
但我应该给什么分配上下文呢
谢谢!:) 传递/要求
上下文在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);
}