2015-01-17 2 views
0

Я пытаюсь создать обертку для информации о местоположении, такой как долгота и высота. Я создаю класс, который простирается от java.lang.object и реализует ILocationListener. Затем я создал service, который создает объект этого класса для получения последней долготы и широты. Код компилируется без каких-либо ошибок.Xamarin/Android - Ошибка вызова службы приемника местоположения

Большая часть кода приведена в онлайн-образце. Проблема в том, что я получаю ошибку времени выполнения: 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); 

    } 

ответ

0

Я выбрал себя из джунглей context. Мое намерение состояло в том, чтобы создать класс, который я могу получить по требованию, и получить информацию location. Но есть пара проблем с этим, важно то, что информация location не кэшируется и может быть получена только onLocationChange.

Поэтому я только что создал сервис и реализовал интерфейс ILocation и выполнил всю свою логику в одном месте.

Смежные вопросы