Рейтинг
+1.16
голосов:
1
avatar

Пишем под Android  

Возможные ошибки при запуске эмулятора Android

Стоит поговорить о двух ошибках, которые могут возникнуть в среде Eclipse при запуске эмулятора и приложения в нем. По умолчанию Android SDK устанавливается в каталог «C:\Program Files\Android\android-sdk», но конфигурация инструментария такова, что могут возникнуть проблемы, если этот путь содержит пробелы или кириллицу. Это связано с работой консольных утилит, входящих в SDK. Итак, когда мы создали приложение и хотим его запустить в эмуляторе, то мы нажимаем кнопку Run и можем видеть следующую ошибку в Console:
[2004-02-12 05:25:51 - Emulator] invalid command-line parameter: Files\Android\android-sdk\tools/emulator-arm.exe. 
[2004-02-12 05:25:51 - Emulator] Hint: use ‘@foo’ to launch a virtual device named ‘foo’. [2004-02-12 05:25:51 - Emulator] please use -help for more information

Как говорилось выше, дело в пути к Android SDK по умолчанию (там стоит пробел). Одним из способов устранения этой ошибки является перемещение папки Android в другое место, например, в корень диска – «C:\ Android\android-sdk». Но есть и более изящное решение. Вспомним о формате MS-DOS для названий папок и файлов, когда можно заменять названия папок в системе Windows по правилу 8-3 (8 символов названия файла или директории и 3 символа на его расширение). Название Program Files тогда можно заменить на PROGRA~1. Так и сделаем – поставим в поле Window > Preferences > Android > SDK Location значение «C:\PROGRA~1\Android\android-sdk» и нажмем Run. При этом может возникнуть другая ошибка: [2004-02-12 05:34:08 — HelloWorld] The connection to adb is down, and a severe error has occured. [2004-02-12 05:34:08 — HelloWorld] You must restart adb and Eclipse.
[2004-02-12 05:34:08 - HelloWorld] Please ensure that adb is correctly located at ‘C:\PROGRA~1\Android\android-sdk\platform-tools\adb.exe’ and can be executed.

Эта проблема также связана с путем до каталога. И лечится также, только теперь редактировать нужно переменную среды PATH, как мы делали здесь, заменив «C:\Program Files\Android\android-sdk» на «C:\PROGRA~1\Android\android-sdk». Теперь всё должно проходить без проблем. Эти ошибки возникают не на всех конфигурациях, но, тем не менее, сталкиваются с ними многие. Теперь мы знаем как их исправлять.

Источник

Как работать с файлами в assets?

Помогите пожалуйста.

Для работы приложения необходимо использовать некоторое количество сторонних файлов общим объемом около 50 МБ. Файлы лежат в различных папках. Как мне прицепить эти папки и файлы к разрабатываемому приложению. Сейчас я создаю в папке assets все необходимые подпапки и импортирую в них все файлы. Компилирую проект, но при размещении его в эмуляторе выдается сообщение об ошибке: com.android.ddmlib.SyncException: No such file or directory. Как вообще работать с большими файлами, которые необходимы проекту? И если получиться запустить проект, то надо из assets читать файлы и записывать их на устройство в нужную папку и с нужным название? Но это увеличит объем приложения в 2 раза! Помогите пожалуйста.

Определение доступности GPS в Android

Эта статья, надеюсь, станет хорошим подспорьем начинающим в области программирования под Android. А может даже и матерые профи что-нибудь почерпнут.

Итак, понадобилось мне как-то определять, доступен ли в настоящее время GPS-фикс. Казалось бы, LBS (location-based service) — вещь перспективная и популярная, и Google, прекрасно это понимая, предоставит простой в обращении инструмент для их разработки. Ага, разбежался… Не так-то все и просто, поэтому приходится в определенной мере изощряться.

Ну и в чем тут у нас собственно проблема? Проблема в определении текущего местоположения пользователя. Видов существует несколько, но ТЗ велит использовать GPS и позиционирование по сотовым вышкам. Задача — определить текущие координаты с максимальной точностью, т.е. в идеале по GPS. Если он недоступен, то по вышкам. Если есть сигнал GPS, то все легко и просто — берем со спутника координаты и делаем с ними что угодно. Если сигнала нет, то при обработке координат вы рискуете нарваться на null, в чем очень мало хорошего, а при недолжной обработке исключений может быть еще и что-нибудь с печальными последствиями гидра . Значит, надо как-то определить, а есть ли у нас фикс?

Ну что ж, проблема видна — будем решать!

Начнем с ковыряния LocationManager. Есть в нем занятное свойство isProviderEnabled(), возвращающее булево значение. Ура? Рано… Это значение всего лишь характеризует, включен GPS-приемник вашего телефона или нет (собственно, можно было и по названию догадаться). Первый блин получился как всегда, идем дальше.

Залезем во внутренности LocationListener. Что мы видим? Ба, да это обработчик onStatusChanged()! В идеале реагирует на изменение статуса провайдера, выставляя соответствующие значения. В идеале… Не реагирует он ни на что начиная с андроида версии 2.1! С грустью проходим мимо.

Продолжим? Конечно продолжим! Очевидным выглядит следующий финт ушами — сравнение времени последнего пришедшего фикса с текущим системным временем. Казалось бы, логично — раз фикс старый, то GPS недоступен. Не совсем так: фиксы приходят только при движении, соответственно можно перепутать недоступность спутников с простым сидением на месте. Согласитесь, будет не совсем приятно, если вы сидите себе сидите, и тут вдруг — оппа! — и ваш телефон решил, что вы телепортнулись метров на 400-500. Снова не то, но приемчик запомним — пригодится.

Теперь посмотрим в сторону GpsStatus.Listener, реализующий метод onGpsStatusChanged(int event). Переменная event может принимать несколько значений, нас же интересует GPS_EVENT_SATELLITE_STATUS. Возникновение такого события говорит о том, что ваш приемник анализирует GPS-спутники. Вот это-то нам и надо! Дальше все просто и понятно — берем текущий статус GPS и вытаскиваем из него доступные спутники. В самом простом случае нас просто интересует их количество.

Небольшое отступление для начинающих в области навигации. Для определения текущей координаты нам в общем-то необходимо три спутника (для трехмерной координаты). Но это если у вас есть атомные часы, что очень-очень редко в случае мобильных девайсов. Поэтому для синхронизации времени нам потребуется еще один спутник.

Итак, дальше все ну совсем замечательно — смотрим количество спутников, если их меньше четырех, то фикса никакого нет и быть не может, значит используем другие методы позиционирования (уж извините, но конкретную реализацию описывать не буду). Этот метод можно скрестить с сопоставлением времен, описанным на пару абзацев выше. Так можно выставить определенный период «доверия» фиксу

Подобьем баланс. Все выше приведенное не дает вам точных гарантий определения доступности фикса. На самом деле просто отсекаются ситуации, в которых фикса уж точно нет. Это, конечно, не совсем то, что хотелось, но уже что-то!

P.S. Ни в коем случае не претендую на авторство указанных методов, т.к. все найдено исключительно с помощью гугла. Целью статьи является сбор всей информации в одну кучу и кое-какое ее структурирование для того, чтобы следующие путешествующие в сказочный мир навигации и программирования мобильных устройств с маленьким зеленым существом не тратили время и нервы.
P.P.S. Очевидно, что метод далек от идеала, поэтому его совершенствование продолжается. Любая помощь и критика (объективная) только приветствуется!

Источник статьи

Работа с GPS на Android

Создадим новый проект Android в Eclipse. Дадим ему название, например: GPSTest, а активности — GPSTestAction.
Откроем GPSTestAction.java и добавим строчки:

( Читать дальше )