Эмулятор Monodroid извлекает проблему определения местоположения

У меня возникают трудности с получением моим приложением Monodroid местоположения, когда я запускаю его в эмуляторе. Мой код выглядит примерно так:

LocationManagerlocationsManager = (LocationManager)threadSurfaceView.Context.GetSystemService(Context.LocationService);

location = LocationManager.GetLastKnownLocation(Android.Content.Context.LocationService);

Однако это всегда возвращает null. Нужно ли каким-то образом настраивать эмулятор, чтобы он имел службу определения местоположения и/или местоположение?

Я также попытался добавить LocationListener:

locationListener = новый MyLocationListener();

LocationManager.RequestLocationUpdates(LocationManager.GpsProvider, 120000, 0, locationListener);

Но проблема, с которой я столкнулся, заключалась в создании класса MyLocationListener. Я реализовал четыре общедоступных метода (OnLocationChanged(Location) и т. д.), но Visual Studio пожаловалась на отсутствие метода Android.Runtime.IJavaObject — есть ли у кого-нибудь простой пример класса, реализующего ILocationListener?

Спасибо за любую помощь. Мартин


person user304582    schedule 30.01.2011    source источник


Ответы (2)


Я получил любезную ссылку на образец на

https://github.com/gshackles/Sample-Projects/blob/master/MonoDroid/MonoDroidSamples/MonoDroidSamples/DemoActivities/LocationDemo/LocationActivity.cs

Что отлично работает на моем Nexus S, но по-прежнему не работает на эмуляторе, так что (возможно) проблема не в коде.

В этом примере мне понравилась техника получения «Activity» для реализации ILocationListener, а также Activity — изящное решение для возврата данных из функции «listener», которая доставляла мне головную боль, когда она была заключена в другой класс.

Я загрузил набор сэмплов, и если вы сделаете то же самое, вам нужно будет взять mp3-файл — переименовать его в volbeat.mp3 и добавить в папку «raw» в «Ресурсах», поскольку он отсутствует.

person Mike    schedule 02.02.2011
comment
Спасибо - посмотрю этот образец. - person user304582; 05.02.2011
comment
В образце github не упоминается, что вам нужно будет добавить следующие 2 разрешения в файл AndroidManifest.xml. <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> - person Adrian Toman; 26.08.2011

частичный ответ, так как я работаю над той же проблемой.

Ваш класс слушателя, который реализует ILocationListener, должен быть объявлен как

открытый класс myLocationListener : Java.Lang.Object, ILOcationListener { // плюс указанные вами открытые функции }

Моя попытка выглядит так:

Android.Locations.Location iAmHere;
LocationManager myLoc = (LocationManager)GetSystemservice(Context.LocationService);
iAmHere = myLoc.GetLastKnownLocation(Android.Content.Context.LocationService);

но iAmHere имеет значение null на эмуляторе, даже когда я использовал TelNet для передачи местоположения геофиксации через

person Mike    schedule 01.02.2011
comment
Да, после того, как я опубликовал свой вопрос ранее, я попробовал тот же подход, и, как и вы, все еще не могу обновить местоположение. Я отложил это в сторону на пару дней, но если кто-то еще может помочь, это будет оценено! Одна вещь, которую я действительно разработал, заключается в том, что я могу просто реализовать в своем классе Monodroid интерфейс ILocationListener, и тогда мне не придется беспокоиться о методе IJavaObject.Handle. - person user304582; 02.02.2011