Решено Zuby и Cody71727172 , может кому пригодиться:
Вообщем кнопочка MyLocation на MapView цепляет данные c LOCATION_SERVICE (Androidapi.JNI.Location)
и если отсутствует GPS датчик в телефоне, тогда:
Прописываем функцию:
function CheckGPSActive: Boolean;
// uses Androidapi.JNIBridge, Androidapi.JNI.Location, Androidapi.JNI.JavaTypes, Androidapi.JNI.GraphicsContentViewText, Androidapi.Helpers
{$IFDEF ANDROID}
var
LocManagerObj: JObject;
LocationManager: JLocationManager;
allProviders: JList;
I: Integer;
begin
Result := false;
LocManagerObj := SharedActivityContext.getSystemService (TJContext.JavaClass.LOCATION_SERVICE); // запрашиваем сервис Location
if Assigned(LocManagerObj) then
begin
LocationManager := TJLocationManager.Wrap((LocManagerObj as ILocalObject).GetObjectID); // получаем LocationManager
if Assigned(LocationManager) then
begin
allProviders := LocationManager.getProviders(true); // запрашиваем список всех провайдеров
if Assigned(allProviders) then
with TStringList.Create do
begin
for I := 0 to allProviders.size - 1 do Add(JStringToString(allProviders.get(I).ToString));
if ((IndexOf('gps') >= 0) or (IndexOf('network') >= 0) or (IndexOf('passive') >= 0)) then
Result := true;
Free;
end;
end;
end;
{$ELSE}
begin
Result := false;
{$ENDIF}
end;
и при запуске LocationSensor например на Form.Create проверяем
procedure TForm_main.FormCreate(Sender: TObject);
begin
{$IFDEF ANDROID}
LocationSensor.Active:=true;
if not LocationSensor.Active then
if not CheckGPSActive then
ShowMessage('Включите GPS для определения Вашего местоположения!')
else
LocationSensor.Active := true;
{$ENDIF}
end;
LocationSensor сам подключит источник данных, поэтому изменять в LSensor1LocationChanged ничего не нужно, например:
procedure TForm_Main.LSensor1LocationChanged(Sender: TObject; const [Ref] OldLocation, NewLocation: TLocationCoord2D);
//uses Maps.Engine
var
MapsEngine: TMapsEngine;
MapsLoc: TMapCoordinate;
MapsData: TMapsEngineGeoData;
begin
MapsLoc := TMapCoordinate.Create(NewLocation.Latitude, NewLocation.Longitude);
MapsEngine.SetOptionsYandex('');
MapsEngine.Geocoding(NewLocation, MapsData);
Edit1.text:= MapsData.FormattedAddress;
end;