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

TLocationSensor почему не пашет в Delphi 10.3.1 FMX RIO android


bossalex

Вопрос

Ниже код работал при правильном манифесте(AndroidManifest.template.xml? его переделал перестал, а исходник не сохранил.

Если кто гуру в этом деле помогите, в долгу не останусь. Являюсь пожизненным поклонником Delphi от 1 версии до последней, первые приложения писал начиная с 1997г.

если кого интересуют мои наработки поделюсь https://www.fl.ru/users/bossalex/

где-то рабочий код брал под fmx 10.3.1 RIO, этот работает только на 10.1.2

==========================исходник проекта прикрепил----------->>>

unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  Androidapi.JNI.Location, Androidapi.JNIBridge, Androidapi.JNI.JavaTypes,
  Androidapi.JNI.Os,Androidapi.Helpers, FMX.Layouts, FMX.ListBox, FMX.StdCtrls,
  FMX.Controls.Presentation,FMX.Platform,System.Rtti;

type

  TLocationListener = class;

  TForm1 = class(TForm)
    Button1: TButton;
    ListBox1: TListBox;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    procedure Button1Click(Sender: TObject);
    { Private declarations }

  private
    FLocationManager : JLocationManager;
    locationListener : TLocationListener;
  public
    destructor Destroy; override;
    { Public declarations }
    procedure onLocationChanged(location: JLocation);
  end;

  TLocationListener = class(TJavaLocal, JLocationListener)
  private
    [weak]
    FParent : TForm1;
  public
    constructor Create(AParent : TForm1);
    procedure onLocationChanged(location: JLocation); cdecl;
    procedure onProviderDisabled(provider: JString); cdecl;
    procedure onProviderEnabled(provider: JString); cdecl;
    procedure onStatusChanged(provider: JString; status: Integer; extras: JBundle); cdecl;
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

uses FMX.Helpers.Android, Androidapi.JNI.GraphicsContentViewText;

{ TLocationListener }

constructor TLocationListener.Create(AParent: TForm1);
begin
  inherited Create;
  FParent := AParent;
end;

procedure TLocationListener.onLocationChanged(location: JLocation);
begin
  FParent.onLocationChanged(location);
end;

procedure TLocationListener.onProviderDisabled(provider: JString);
begin

end;

procedure TLocationListener.onProviderEnabled(provider: JString);
begin

end;

procedure TLocationListener.onStatusChanged(provider: JString; status: Integer;
  extras: JBundle);
begin

end;

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var
  LocationManagerService: JObject;
  iter : JIterator;
  location : JLocation;
  ClipService: IFMXClipboardService;
begin
 try
  if not Assigned(FLocationManager) then
  begin
    LocationManagerService := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.LOCATION_SERVICE);
    FLocationManager := TJLocationManager.Wrap((LocationManagerService as ILocalObject).GetObjectID);
    if not Assigned(locationListener) then
      locationListener := TLocationListener.Create(self);
    FLocationManager.requestLocationUpdates(TJLocationManager.JavaClass.GPS_PROVIDER, 10000, 10, locationListener,
        TJLooper.JavaClass.getMainLooper);
  end;
  iter := FLocationManager.GetAllProviders.Iterator;
  ListBox1.Clear;
  while iter.hasNext do
  begin
    ListBox1.Items.Add(JStringToString(iter.next.ToString));
  end;
  CheckBox1.IsChecked := FLocationManager.isProviderEnabled(TJLocationManager.JavaClass.GPS_PROVIDER);
  CheckBox2.IsChecked := FLocationManager.isProviderEnabled(TJLocationManager.JavaClass.NETWORK_PROVIDER);
  location := FLocationManager.getLastKnownLocation(TJLocationManager.JavaClass.GPS_PROVIDER);
  onLocationChanged(location);
 except
    on e:Exception do
    begin
        if TPlatformServices.Current.SupportsPlatformService(IFMXClipboardService,ClipService) then
    Begin
      ClipService.SetClipboard(TValue.From<string>(e.Message));
      ShowMEssage(e.Message);
    end;
    end;
 end;
end;

AndroidGPS.zip

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

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

  • 0
1 час назад, aleksandrguru сказал:

Вот посмотри пример все работает https://okurl.ru/Ga7V5RR

Большое спасибо выручили, только как-то стало за мудрено использовать компонент.

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

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

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

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

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

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

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

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

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

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...