Урок 138. Определение местоположения. GPS координаты.

Обсуждение уроков
Аватара пользователя
LesliStr
Сообщения: 105
Зарегистрирован: 31 окт 2013, 09:31
Откуда: Минск

Re: Урок 138. Определение местоположения. GPS координаты.

Сообщение LesliStr » 07 янв 2014, 19:55

altwin писал(а):
m090050 писал(а):Ни разу не видел чтобы приходили данные с запятой, работая в разных локациях. А Вы уверены что это не ваши преобразования с форматом или еще чем? Вы пробовали выводить в лог до всяких преобразований?
мне почему то сразу показалось, что это прикол какой -то китайской прошивки :)
Прошивка официальная, от НТС.

Аватара пользователя
LesliStr
Сообщения: 105
Зарегистрирован: 31 окт 2013, 09:31
Откуда: Минск

Re: Урок 138. Определение местоположения. GPS координаты.

Сообщение LesliStr » 07 янв 2014, 20:38

Может наша белорусская локаль какая-то особенная ))) Но во всяком случае эти грабли надо как-то обходить. И к стати, если я вбиваю ручками стринг в правильном формате и отсылаю широковещательный интент, "Кто куда" отзыватся и показывает верное местоположение. Ну а если форматирую таким образом (форматируется с запятыми, проверено)
String ltln = String.format("%1$.5f", location.getLatitude(), location.getLongitude());
вот тут траблы.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Урок 138. Определение местоположения. GPS координаты.

Сообщение Mikhail_dev » 08 янв 2014, 01:09

m090050 писал(а):Ни разу не видел чтобы приходили данные с запятой, работая в разных локациях. А Вы уверены что это не ваши преобразования с форматом или еще чем? Вы пробовали выводить в лог до всяких преобразований?
До всяких преобразований? Не надо никаких printf. Просто вывести на экран

Аватара пользователя
LesliStr
Сообщения: 105
Зарегистрирован: 31 окт 2013, 09:31
Откуда: Минск

Re: Урок 138. Определение местоположения. GPS координаты.

Сообщение LesliStr » 08 янв 2014, 08:07

printf здесь не причём. Я просто привёл выдержку из вики о международных правилах форматирования строк, в котором говорится, что для вывода разделителя плавающей точки может использоваться любой знак, зависящий от локали.
Вот форматирование выводимого текста:

return String.format(" time\n positioning:\n" + " %3$tT\n" + " %3$tF\n"
+ " Coordinates:\n" + " lat = %1$.5f\n lon = %2$.5f\n"
+ " Positioning\n" +
" accuracy(m):\n" + " %4$.1f\n"
+ " Speed(m/c):\n" + " %5$.1f", location.getLatitude(),
location.getLongitude(), new Date(location.getTime()),
location.getAccuracy(), location.getSpeed());

И его отображение на экране:
format.jpg
format.jpg (85.57 КБ) 13909 просмотров
Для данной (моей) локали, везде в качестве разделителя используется запятая.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Урок 138. Определение местоположения. GPS координаты.

Сообщение Mikhail_dev » 08 янв 2014, 10:24

Я честно говоря не проверял и не встречал такого, но не верится что Андроид не может обрабатывать то, что сам и выдаёт. Т.е. LocationManager выдает с плавающей точкой, а в Intent уже с плавающей точкой числа не забить.

Аватара пользователя
LesliStr
Сообщения: 105
Зарегистрирован: 31 окт 2013, 09:31
Откуда: Минск

Re: Урок 138. Определение местоположения. GPS координаты.

Сообщение LesliStr » 08 янв 2014, 10:47

m090050 писал(а):Я честно говоря не проверял и не встречал такого, но не верится что Андроид не может обрабатывать то, что сам и выдаёт. Т.е. LocationManager выдает с плавающей точкой, а в Intent уже с плавающей точкой числа не забить.
Тем не менее я упёрся в эту проблему. В интенте надо передать стринг, а при форматировании этого стринга, для своей локали, я вместо точки получаю запятую.

Аватара пользователя
LesliStr
Сообщения: 105
Зарегистрирован: 31 окт 2013, 09:31
Откуда: Минск

Re: Урок 138. Определение местоположения. GPS координаты.

Сообщение LesliStr » 08 янв 2014, 18:29

Ну, в общем проверить то что знак разделителя зависит от локали легко. Включаю в настройках телефона язык интерфейса - английский и вывод знака разделителя меняется на точку.
local.jpg
local.jpg (56.38 КБ) 13900 просмотров
А вот эта русская локаль у меня стоит.
local_ru.jpg
local_ru.jpg (33.35 КБ) 13900 просмотров
Так как же правильно сформировать стринг, что бы передать его интентом ?

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Урок 138. Определение местоположения. GPS координаты.

Сообщение Mikhail_dev » 08 янв 2014, 20:39

Правильно ли я понял, что проблема перевести запятую в точку?

Аватара пользователя
LesliStr
Сообщения: 105
Зарегистрирован: 31 окт 2013, 09:31
Откуда: Минск

Re: Урок 138. Определение местоположения. GPS координаты.

Сообщение LesliStr » 08 янв 2014, 21:36

Так.... Начнём с начала. Я формирую запрос для широковещательного интента:

intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("geo:"+ltln));
startActivity(intent);

Если я руками прописываю:

String ltln = "53.89551,27.58708";

То запрос проходит и всё прекрасно работает. Если же я формирую этот стринг вот так:

String ltln = String.format("%1$.5f,%2$.5f", location.getLatitude(), location.getLongitude());

в этом случае запрос не проходит, карта открывается (Scheme распознана), но позиция не показывается. Я так понимаю, что координаты не валидны. Что я делаю не так ? Предполагаю, что стринг формируется с учётом локали и вместо точки подставляется запятая. Как правильно сформировать стринг ?

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Урок 138. Определение местоположения. GPS координаты.

Сообщение Mikhail_dev » 08 янв 2014, 22:22

String ltln = ""+ loc.getLatitude() + loc.getLongitude();
String str = ltln.replace(",", ".");
intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("geo:"+ltln));
startActivity(intent);

думаю что так. Если не выйдет, то хотелось бы знать, что получилось в строке "str"

Аватара пользователя
LesliStr
Сообщения: 105
Зарегистрирован: 31 окт 2013, 09:31
Откуда: Минск

Re: Урок 138. Определение местоположения. GPS координаты.

Сообщение LesliStr » 08 янв 2014, 22:31

Блин, а я искал как отключить местную локаль. В параметре "l" надо передать null, тогда локаль для StringBuilder использоваться не будет. Либо в этом параметре передать для билдера включение английской локали.

Аватара пользователя
LesliStr
Сообщения: 105
Зарегистрирован: 31 окт 2013, 09:31
Откуда: Минск

Re: Урок 138. Определение местоположения. GPS координаты.

Сообщение LesliStr » 08 янв 2014, 22:39

Хмммм.... через replace не вариант. У пользователя может стоять любая локаль и вместо точки любой знак, к тому же и цифры могут отформатироваться каким-нибудь арабским шрифтом. Правильнее наверное будет отключить локаль.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Урок 138. Определение местоположения. GPS координаты.

Сообщение Mikhail_dev » 08 янв 2014, 22:46

Однозначно правильнее. Работает?
На счет других символов не уверен. Думаю точка и запятая это единственное, что может быть.

Аватара пользователя
LesliStr
Сообщения: 105
Зарегистрирован: 31 окт 2013, 09:31
Откуда: Минск

Re: Урок 138. Определение местоположения. GPS координаты.

Сообщение LesliStr » 08 янв 2014, 22:53

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

Аватара пользователя
LesliStr
Сообщения: 105
Зарегистрирован: 31 окт 2013, 09:31
Откуда: Минск

Re: Урок 138. Определение местоположения. GPS координаты.

Сообщение LesliStr » 08 янв 2014, 23:09

Ещё одно подтверждение, что используется при форматировании местная локаль. Переключил интерфейс телефона на английский и всё заработало. Надо искать как для StringBuilder отключить использование местной локали.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Урок 138. Определение местоположения. GPS координаты.

Сообщение Mikhail_dev » 09 янв 2014, 00:23

Если найдется решение, дайте знать. Вполне вероятно, что нас ожидает данная проблема. Очень странно, что еще не видели её.

Аватара пользователя
LesliStr
Сообщения: 105
Зарегистрирован: 31 окт 2013, 09:31
Откуда: Минск

Re: Урок 138. Определение местоположения. GPS координаты.

Сообщение LesliStr » 09 янв 2014, 09:59

Проблему решил следующим образом:

ltln = String.format(Locale.US,"%1$.5f,%2$.5f", location.getLatitude(), location.getLongitude());

Включаю принудительно использование локали Locale.US Доки по этому поводу вот, что пишут:
"The default locale is not appropriate for machine-readable output. The best choice there is usually Locale.US – this locale is guaranteed to be available on all devices, and the fact that it has no surprising special cases and is frequently used (especially for computer-computer communication) means that it tends to be the most efficient choice too. "
Теперь у меня всё работает как надо ))

ZDroid
Сообщения: 3
Зарегистрирован: 11 янв 2014, 17:02

Re: Урок 138. Определение местоположения. GPS координаты.

Сообщение ZDroid » 11 янв 2014, 17:17

Всем привет! У меня проблемка с этим уроком. Сделал все как в уроке (даже потом скачал исходники). На эмуляторе apk P138_Location установился и приложение запустилось.
Но на реальном устройстве Google Tab c android 4.2.2 на борту, устанавливаться никак не хочет. Пишет приложение не установлена. Менял Project Buld target, но все равно не получается. Что может быть не так?

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Урок 138. Определение местоположения. GPS координаты.

Сообщение Mikhail_dev » 11 янв 2014, 18:21

И каким образом Вам помочь, когда вы не сказали ровным счетом ничего о том, что вам пишет?

ZDroid
Сообщения: 3
Зарегистрирован: 11 янв 2014, 17:02

Re: Урок 138. Определение местоположения. GPS координаты.

Сообщение ZDroid » 11 янв 2014, 20:08

m090050 писал(а):И каким образом Вам помочь, когда вы не сказали ровным счетом ничего о том, что вам пишет?
В том и печаль, что на устройстве никаких сообщений не выводится, кроме как окна с надписью "Приложение не установлено" и кнопкой Готово. А логи я не знаю, где взять с реального устройства.

Я уже понял в чем проблема - если apk создать экспортом export unsigned... (неподписаное), то приложение не установиться.
Пришлось создать экспортом signed. Приложение в этом случае установилось.

Но так и не понятно почему unsigned apk не инсталлирует приложение.

Ответить