Перейти к содержанию
Fire Monkey от А до Я
  • 0

TLocationSensor - километраж


Alex Bakulin

Вопрос

Вопрос простой - есть какие-то встроенные методы, которые позволяют определять пройденное расстояние? Оно понятно, что можно искать расстояние между двумя точками, но вдруг уже до нас что-то придумали. 

Ссылка на комментарий

Рекомендуемые сообщения

  • 1
11 часов назад, Саша сказал:

есть ли возможность получать координаты с сенсора принудительно, а не ждать, пока сработает LocationChanged?

Конечно я же вам писал код 2 вариант, в таймере или потоке делаете

  provider := locationManager.getBestProvider(criteria, true);
  location := LocationManager.getLastKnownLocation(provider);

Конечно не хватает, вы либо устанавливаете всю библиотеку alcinoe, а она устанавливается просто копированием файлов, т.к. вам не нужны визуальные компоненты, либо открываете исходник и копируете код с некоторыми правками под fmx

Изменено пользователем OnePeople
Ссылка на комментарий
  • 0
5 часов назад, OnePeople сказал:

Конечно я же вам писал код 2 вариант, в таймере или потоке делаете

  provider := locationManager.getBestProvider(criteria, true);
  location := LocationManager.getLastKnownLocation(provider);

Здесь несколько вопросов.

1. Достаточно ли второй вариант для пробы вставить в нажатие кнопки Click.

2. В конце второго варианта не хватает только одной строки end; ?

3. Что там в uses?

4. Да и пеерменные какого типа?

 

В инете пока ответы на эти вопросы не нахожу.

Изменено пользователем Саша
Дополнение 2
Ссылка на комментарий
  • 1
43 минуты назад, Саша сказал:

Здесь несколько вопросов.

1. Достаточно ли второй вариант для пробы вставить в нажатие кнопки Click.

2. В конце второго варианта не хватает только одной строки end; ?

3. Что там в uses?

4. Да и пеерменные какого типа?

1.Так попробуйте

2.

provider := locationManager.getBestProvider(criteria, true);
            location := LocationManager.getLastKnownLocation(provider);
            if location <> nil then
              begin
                dLatitude := location.getLatitude;
                dLongitude := location.getLongitude;
                dBearing := location.getBearing;

Это вообще отдельно можете хоть в кнопку вставить

3.Androidapi.JNI.Location

4.Вы вообще не хотите ни чего делать, это же глупый вопрос 

LocationManager := TJLocationManager.Wrap((LocationManagerNative as ILocalObject).GetObjectID);

Соответственно JLocationManager

 

criteria := TJCriteria.JavaClass.init;

Соответственно JCriteria

 

LocationManagerNative := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.LOCATION_SERVICE);

Соответственно JObject

5. Вообще Ctrl + space вам в помощь

Ссылка на комментарий
  • 0
4 часа назад, OnePeople сказал:

Вообще Ctrl + space вам в помощь

Ctrl + space у меня не работает.

А в коде все равно куча ошибок. Катастрофа!

 

1.png

2.png

В строках 1622 и 1639 вот такая ошибка:

there is no overloaded that can be called with these arguments

нет никакого перегруженного, который можно было бы вызвать с этими аргументами
 

Изменено пользователем Саша
Дополнение
Ссылка на комментарий
  • 0
В 29.08.2023 в 06:45, OnePeople сказал:

Вообще бы не парились

Скачал Alcinoe-master. Компиляция шла дольше, чем обычно, что обнадеживало, но затем жалоба на невозможность открыть вот этот файл:

C:\Alcinoe-master\Demos\ALGeoPositionSensor\_Source\EXEC

Ну это ладно. Займусь этим позже.

Ссылка на комментарий
  • 0
14 часов назад, OnePeople сказал:

1622 ну так правильно вы слушатель не создали

Спасибо! И дай Бог,Вам терпения. Похоже, осталось чуть-чуть.

Правильно ли я сделал?

После класса TForm добавил вот что.

  TMyLocatioListner = class(TJavaLocal, JLocationListener)
  private
    [weak]
    FParent: TForm1;
  public
    constructor Create(AParent: TForm1);
    Destructor Destroy; Override;
    procedure onFlushComplete(requestCode: integer); cdecl;
    procedure onLocationChanged(Location: Jlocation); overload; cdecl;
    procedure onLocationChanged(Location: JList); overload; cdecl;
    procedure onProviderDisabled(Provider: JString); cdecl;
    procedure onProviderEnabled(Provider: JString); cdecl;
    procedure onStatusChanged(Provider: JString; status: integer;
      extras: JBundle); cdecl;
  end;

var LocationListner:TMyLocatioListner;  // это создание слушателя?

После этого число ошибок уменьшилось, но они еще остались.


 

2023-09-05_19-53-41.png

 

Да. И какого типа переменные:  dLatitude, dLongitude, dBearing?
У меня они double.

Изменено пользователем Саша
Корректировка сообщения
Ссылка на комментарий
  • 1

Объект создается при вызове его конструктора
Object := TMyObject.Create;

var Object : TMyObject; -- это всего лишь описание переменной, ничего более

это ничем не отличается от разных других языков, где object = new Object;

переменная Location должна иметь тот же тип, что возвращает метод LocationManager.GetLastKnownLocation()

соответственно, в описании этого типа можно посмотреть, какой тип имеют его методы  GetLatitude, GetLongitude, GetBearing

Ссылка на комментарий
  • 0

Огромно спасибо откликнувшимся в решении данной проблемы!!!

Да! Есть еще асы на этом форуме!

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

LocationListener работает!

Надеюсь, что и в Android13 ои будет работать.

 

 

Ссылка на комментарий
  • 0

 

Вставил  в поток по совету OnPeople

provider := locationManager.getBestProvider(criteria, true);

location := LocationManager.getLastKnownLocation(provider);

и т. д.

Работает. Координаты передаются. В верхнем правом углу телефона появляется значок GPS. Если свернуть приложение, а затем развернуть, то через несколько секунд этот значок гаснет, но координаты продолжают определятся.

Пришлось закомментировать эту строку, dBearing := location.getBearing , так как иногда возникает ошибка деления на 0. Похоже, что там возращается NaN. Попробую ее облачить в конструкцию try except  end.

Ссылка на комментарий
  • 0

Моя задумка постепенно воплощается в жизнь.

В личку пришлю исходники всем ответившим. Только обещайте, что не будете смеяться с имен переменных.

Программа еще должна передавать некоторые сигнальные файлы на FTP. Это работало отлично, пока я не добавил в манифест:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
после этого связь с интернетом пропала.

Связь восстановилась после добавления в манифест строки:
<uses-permission android:name="android.permission.INTERNET" />


Есть ли такая возможность включать/включать доступ в интернет независимо от пользователя?
То есть цикл в потоке на четном проходе включает доступ в интернет и передает файлы на FTP, а на нечетном выключает.
На нечетном проходе получает только координаты.

Ссылка на комментарий
  • 1

пользоваться интернетом на телефоне и включать/выключать на телефоне доступ к конкретному адаптеру - сильно разные задачи

скорее всего, второй вариант система вообще не даст

Ссылка на комментарий
  • 0
7 часов назад, krapotkin сказал:

пользоваться интернетом на телефоне и включать/выключать на телефоне доступ к конкретному адаптеру - сильно разные задачи

скорее всего, второй вариант система вообще не даст

Тогда и заморачиваться с этим не буду. Сегодня нашел вот такю программу.

GPS+Test_v1.6.5.apk

Изменено пользователем Саша
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...