我正在使用本机位置管理器,但是如果我关闭位置传感器然后再次打开,则应用程序在启动后立即崩溃(位置传感器图标只是闪烁)。 但是,如果我模拟一个新位置,则它不会崩溃并且可以完美运行。

附注:同样,虽然应用程序在启动时一直崩溃,但是如果我运行Waze,请等待10秒钟,然后再次启动,它可以正常工作。

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, FMX.Layouts, FMX.ListBox, FMX.StdCtrls,
  FMX.Controls.Presentation, Androidapi.Helpers;

type

  TLocationListener = class;

  TForm1 = class(TForm)
    Label1: TLabel;
    procedure FormShow(Sender: TObject);
  private
    FLocationManager : JLocationManager;
    locationListener : TLocationListener;
  public
    destructor Destroy; override;
    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 }

destructor TForm1.Destroy;
begin
  if Assigned(locationListener) then
    FLocationManager.removeUpdates(locationListener);
  inherited;
end;

procedure TForm1.FormShow(Sender: TObject);
var
  LocationManagerService: JObject;
  location : JLocation;
begin
  if not Assigned(FLocationManager) then
  begin
    LocationManagerService := SharedActivityContext.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, 2000, 20, locationListener,TJLooper.JavaClass.getMainLooper);
  end;
  location := FLocationManager.getLastKnownLocation(TJLocationManager.JavaClass.GPS_PROVIDER);
  onLocationChanged(location);
end;

procedure TForm1.onLocationChanged(location: JLocation);
begin
 Label1.Text := FloatToStr((location.getSpeed*3600)/1000) + ' km/h';
end;

end.

我想念什么? 事件的哪一部分可能导致此崩溃?

  ask by Maurício Lima translate from so

本文未有回复,本站智能推荐:

1回复

释放选定标记的表单会使应用程序崩溃(MapView)

如果使用此在MapView上选择了任何标记: 表单关闭后,应用立即崩溃。 但是,如果使用此: 该应用程序不会崩溃,但是在关闭表单后会触发访问冲突消息。 是什么原因造成的? 有办法避免吗? 最好的祝福
1回复

使用 Firemonkey/Delphi 打开 Android 26 的 PDF 文件时出现异常

我正在使用 Delphi 10.1 Berlin 开发 Android 移动应用程序,我需要从应用程序打开 PDF 文件,但出现错误 - android.os.FileUriExposedException: file:///Storage/emulated/0/Download/ AppDataD
1回复

无论MIME类型如何,如何在Firemonkey中打开文件

存在Gmail附件时: 如果该文件是txt文件,则会打开一个可以打开的应用程序列表。 如果它是图像文件,则打开可以打开照片,照片,图库等的应用程序列表。 假设您知道本地存在于Android中的文件的路径,那么我该如何实现它,因此可以通过单击打开它? 在Window
1回复

Xe5 locationsensor距离不起作用?

我在Android上的应用程序TLocationSensor使用,但是Distance属性有问题。 如果我设置了10米,但我不移动,则会触发OnLocationChange。 我应该设置什么以及如何使其起作用?
2回复

如果应用程序启动后允许定位,Delphi Android 位置传感器将无法工作

我对TLocationSensor有一个有趣的问题。 如果在我启动应用程序之前在 Android 菜单中允许该位置,则传感器工作正常。 我捕捉到事件OnLocationChange 。 但是,如果我不允许在 Android 菜单中定位并启动应用程序,然后在 Android 菜单中允许定位,则传感器将
1回复

终止打开的应用程序和关闭机器 - Delphi Win10 问题

目前,我正在 Delphi 中创建一个应用程序,该应用程序将允许计算机在关闭打开的应用程序后完全关闭。 目前,我遇到了代码在 Win10 企业版中无法正常运行的问题,并且它正在将用户注销,但没有完全关闭 PC。 代码的核心在下面,我不清楚为什么这只会让我退出而不是完全关闭计算机。 用户将定义参数以
1回复

TDictionary通过DataSnap崩溃,FComparer为零

我在DataSnap客户端中发生字典崩溃,因为它的FComparer无效。 服务器端代码: 客户端代码: Colors.Items[1]崩溃(以及需要FComparer的其他函数)。 当函数尝试访问FComparer时,崩溃发生在System.Generics.Colle
1回复

Delphi动态数组SetLength崩溃

我正在使用Delphi 10.1和Windows 10,以及所有当前更新。 我的应用程序使用并重复使用大量动态数组(50个或更多),每个动态数组最多包含5,000个元素。 在执行期间,使用SetLength(thearray,0)或thearray:=nil清除这些数组。 在此之后,立