Прошивка официальная, от НТС.altwin писал(а):мне почему то сразу показалось, что это прикол какой -то китайской прошивкиm090050 писал(а):Ни разу не видел чтобы приходили данные с запятой, работая в разных локациях. А Вы уверены что это не ваши преобразования с форматом или еще чем? Вы пробовали выводить в лог до всяких преобразований?
Урок 138. Определение местоположения. GPS координаты.
Re: Урок 138. Определение местоположения. GPS координаты.
Re: Урок 138. Определение местоположения. GPS координаты.
Может наша белорусская локаль какая-то особенная ))) Но во всяком случае эти грабли надо как-то обходить. И к стати, если я вбиваю ручками стринг в правильном формате и отсылаю широковещательный интент, "Кто куда" отзыватся и показывает верное местоположение. Ну а если форматирую таким образом (форматируется с запятыми, проверено)
String ltln = String.format("%1$.5f", location.getLatitude(), location.getLongitude());
вот тут траблы.
String ltln = String.format("%1$.5f", location.getLatitude(), location.getLongitude());
вот тут траблы.
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 138. Определение местоположения. GPS координаты.
До всяких преобразований? Не надо никаких printf. Просто вывести на экранm090050 писал(а):Ни разу не видел чтобы приходили данные с запятой, работая в разных локациях. А Вы уверены что это не ваши преобразования с форматом или еще чем? Вы пробовали выводить в лог до всяких преобразований?
Re: Урок 138. Определение местоположения. GPS координаты.
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());
И его отображение на экране: Для данной (моей) локали, везде в качестве разделителя используется запятая.
Вот форматирование выводимого текста:
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());
И его отображение на экране: Для данной (моей) локали, везде в качестве разделителя используется запятая.
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 138. Определение местоположения. GPS координаты.
Я честно говоря не проверял и не встречал такого, но не верится что Андроид не может обрабатывать то, что сам и выдаёт. Т.е. LocationManager выдает с плавающей точкой, а в Intent уже с плавающей точкой числа не забить.
Re: Урок 138. Определение местоположения. GPS координаты.
Тем не менее я упёрся в эту проблему. В интенте надо передать стринг, а при форматировании этого стринга, для своей локали, я вместо точки получаю запятую.m090050 писал(а):Я честно говоря не проверял и не встречал такого, но не верится что Андроид не может обрабатывать то, что сам и выдаёт. Т.е. LocationManager выдает с плавающей точкой, а в Intent уже с плавающей точкой числа не забить.
Re: Урок 138. Определение местоположения. GPS координаты.
Ну, в общем проверить то что знак разделителя зависит от локали легко. Включаю в настройках телефона язык интерфейса - английский и вывод знака разделителя меняется на точку.
А вот эта русская локаль у меня стоит.
Так как же правильно сформировать стринг, что бы передать его интентом ?
А вот эта русская локаль у меня стоит.
Так как же правильно сформировать стринг, что бы передать его интентом ?
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 138. Определение местоположения. GPS координаты.
Правильно ли я понял, что проблема перевести запятую в точку?
Re: Урок 138. Определение местоположения. GPS координаты.
Так.... Начнём с начала. Я формирую запрос для широковещательного интента:
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 распознана), но позиция не показывается. Я так понимаю, что координаты не валидны. Что я делаю не так ? Предполагаю, что стринг формируется с учётом локали и вместо точки подставляется запятая. Как правильно сформировать стринг ?
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 координаты.
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"
String str = ltln.replace(",", ".");
intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("geo:"+ltln));
startActivity(intent);
думаю что так. Если не выйдет, то хотелось бы знать, что получилось в строке "str"
Re: Урок 138. Определение местоположения. GPS координаты.
Блин, а я искал как отключить местную локаль. В параметре "l" надо передать null, тогда локаль для StringBuilder использоваться не будет. Либо в этом параметре передать для билдера включение английской локали.
Re: Урок 138. Определение местоположения. GPS координаты.
Хмммм.... через replace не вариант. У пользователя может стоять любая локаль и вместо точки любой знак, к тому же и цифры могут отформатироваться каким-нибудь арабским шрифтом. Правильнее наверное будет отключить локаль.
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 138. Определение местоположения. GPS координаты.
Однозначно правильнее. Работает?
На счет других символов не уверен. Думаю точка и запятая это единственное, что может быть.
На счет других символов не уверен. Думаю точка и запятая это единственное, что может быть.
Re: Урок 138. Определение местоположения. GPS координаты.
Ну вообще-то в доках говорится, что знак может быть любым соответствующим местной локали. Пока не могу найти как отключить в билдере использование местной локали ((m090050 писал(а):Однозначно правильнее. Работает?
На счет других символов не уверен. Думаю точка и запятая это единственное, что может быть.
Re: Урок 138. Определение местоположения. GPS координаты.
Ещё одно подтверждение, что используется при форматировании местная локаль. Переключил интерфейс телефона на английский и всё заработало. Надо искать как для StringBuilder отключить использование местной локали.
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 138. Определение местоположения. GPS координаты.
Если найдется решение, дайте знать. Вполне вероятно, что нас ожидает данная проблема. Очень странно, что еще не видели её.
Re: Урок 138. Определение местоположения. GPS координаты.
Проблему решил следующим образом:
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. "
Теперь у меня всё работает как надо ))
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. "
Теперь у меня всё работает как надо ))
Re: Урок 138. Определение местоположения. GPS координаты.
Всем привет! У меня проблемка с этим уроком. Сделал все как в уроке (даже потом скачал исходники). На эмуляторе apk P138_Location установился и приложение запустилось.
Но на реальном устройстве Google Tab c android 4.2.2 на борту, устанавливаться никак не хочет. Пишет приложение не установлена. Менял Project Buld target, но все равно не получается. Что может быть не так?
Но на реальном устройстве Google Tab c android 4.2.2 на борту, устанавливаться никак не хочет. Пишет приложение не установлена. Менял Project Buld target, но все равно не получается. Что может быть не так?
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 138. Определение местоположения. GPS координаты.
И каким образом Вам помочь, когда вы не сказали ровным счетом ничего о том, что вам пишет?
Re: Урок 138. Определение местоположения. GPS координаты.
В том и печаль, что на устройстве никаких сообщений не выводится, кроме как окна с надписью "Приложение не установлено" и кнопкой Готово. А логи я не знаю, где взять с реального устройства.m090050 писал(а):И каким образом Вам помочь, когда вы не сказали ровным счетом ничего о том, что вам пишет?
Я уже понял в чем проблема - если apk создать экспортом export unsigned... (неподписаное), то приложение не установиться.
Пришлось создать экспортом signed. Приложение в этом случае установилось.
Но так и не понятно почему unsigned apk не инсталлирует приложение.