Xamarin / Android - 位置监听器服务调用错误

时间:2015-01-17 01:03:24

标签: c# android xamarin

我正在尝试为位置信息(例如经度和海拔高度)创建包装器。我创建了一个从java.lang.object扩展的类,并实现了ILocationListener。然后我创建了一个service,它创建了这个类的对象以获得最新的经度和纬度。代码编译没有任何错误。

这里的大多数代码来自在线样本。问题是我收到运行时错误Can't create handler inside thread that has not called Looper.prepare()请注意,此处没有用户界面。我确实试图通过"这个"作为服务的背景,但没有任何区别。

任何人都知道为什么我收到关于Looper.prepare()的运行时错误? 提前谢谢。

public  class GeoInfoService : Java.Lang.Object, ILocationListener
{
    public GeoInfo GeoInfoResult { get; set; }

    [System.ComponentModel.DefaultValue(30000)]
    public long MinimumTimeForUpdate { get; set; }

    [System.ComponentModel.DefaultValue(1)]
    public float MinimumDistanceForUpdate {get; set;}

    [System.ComponentModel.DefaultValue(true)]
    public bool isProviderEnabled { get; set; }

    [System.ComponentModel.DefaultValue("")]
    public string Status { get; set; }

    [System.ComponentModel.DefaultValue("")]
    public string Provider { get; set; }

    [System.ComponentModel.DefaultValue(false)]
    public bool hasError { get; set; }

    public System.Text.StringBuilder lastError { get; set; }

    LocationManager locMgr;
    string tag = "GeoInfoService";

    public GeoInfoService(Context context) 
    {
        lastError = new System.Text.StringBuilder ();
        MinimumTimeForUpdate = 2000;
        MinimumDistanceForUpdate = 1;

        locMgr =  context.GetSystemService (Context.LocationService) as LocationManager;

            var locationCriteria = new Criteria ();
            locationCriteria.Accuracy = Accuracy.NoRequirement;

            locationCriteria.PowerRequirement = Power.NoRequirement;// Power.Medium;
            string locationProvider = locMgr.GetBestProvider (locationCriteria, true);
            Log.Debug (tag, "Starting location updates with " + locationProvider.ToString ());


//THIS IS where we have the error java.lang.RuntimeException
//Can't create handler inside thread  that has not called Looper.prepare()
//  I also replaced "this" with context that was passed from the service

            locMgr.RequestLocationUpdates (locationProvider, MinimumTimeForUpdate, MinimumDistanceForUpdate, this);

    }

1 个答案:

答案 0 :(得分:0)

我让自己离开了context丛林。我的目的是创建一个我可以按需创建的类,并获取location信息。但是有一些问题,重要的是location信息没有被缓存,只能通过onLocationChange获得。

所以我刚刚创建了一个服务并实现了ILocation接口,并在一个地方完成了我的所有逻辑。