Использование GPS Monodroid - PullRequest
       6

Использование GPS Monodroid

2 голосов
/ 14 сентября 2011

В Monodroid я пытаюсь получить доступ к службам GPS.Все, что мне нужно, это объект местоположения.

эта строка содержит ошибку:

  • _locationManager.RequestLocationUpdates (LocationManager.GpsProvider, 1000, 10, this);

Java.Lang.SecurityException

Трассировка стека сообщает в Android.Runtime.JNIEnv.CallVoidMethod (IntPtr jobject, IntPtr jmethod, Android.Runtime.jValue [] params) [0x00000] in: 0

У меня установлена ​​последняя версия monodroid, и я запускаю ее на физическом устройстве Samsung Galaxy S II.

Я думаю, что это как-то связано с файлом манифеста - я подозреваю, что есть атрибут, который мне не хватает, так что Monodroid может сгенерировать манифест, который сообщает устройству, что я использую службы GPS.

Из http://docs.xamarin.com/android/advanced_topics/working_with_androidmanifest.xml я знаю, что Monodroid генерирует свой собственный файл AndroidManifest с помощью mandroid.exe.Теперь я должен либо сам изменить файл AndroidManifest.xml, либо получить мандроид для вставки GPS-данных.Вот кикер: нет файла 'слияния', как описано по ссылке выше - так что мне осталось сделать это через mandroid.

Так я могу создать и добавить новый файл для слияния с Mandroid?

Вот что я делаю:

...
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.Locations;
...

namespace mynamespace
{
    [Activity(Label = "My Activity")]  
    public class MainActivity : Activity, ILocationListener
    {
        ...
        #region Location Variables
        LocationManager _locationManager;
        #endregion

        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            SetContentView(Resource.Layout.MainPage);

            ...
            #region Location Setup
            try
            {
                _locationManager = null;

                if (/*user says to use location services*/)
                {

                    _locationManager = (LocationManager)GetSystemService(Context.LocationService);
                    _locationManager.RequestLocationUpdates(LocationManager.GpsProvider, 1000, 10, this);
                }
            }
            catch (Exception ex)
            {
                _debug.Text = string.Format("{0} -- {1}",ex.Message,ex.StackTrace);
            }

            #endregion

            ...
        }

        #region Common Methods
        ...
        #endregion

        #region Events
        ...
        #endregion

        #region Location Services
        public void OnLocationChanged(Location location)
        {
            _debug.Text = string.Format("long: {0}, lat: {1}", location.Longitude, location.Latitude);
        }

        public void OnProviderDisabled(string provider)
        {
            //throw new NotImplementedException();
        }

        public void OnProviderEnabled(string provider)
        {            
            //throw new NotImplementedException();
        }

        public void OnStatusChanged(string provider, int status, Bundle extras)
        {
            //throw new NotImplementedException();
        }
        #endregion
    }
}

1 Ответ

7 голосов
/ 14 сентября 2011

Ваше приложение не имеет прав доступа GPS .Чтобы решить это открытое контекстное меню в проекте, выберите Свойства-> Манифест Android .Если ничего нет, нажмите на ссылку " AndroidMaifest.xml не найден. Нажмите, чтобы добавить один. " Проверьте разрешение на доступ к данным GPS - ACCESS_FINE_LOCATION .Сохранить, восстановить, наслаждайтесь.

...