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

Вызвать настройки GPS в Android


Rusland

Вопрос

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

  • 2
  • Модераторы

интентом вызывается, вот так

procedure TForm4.GPSSettings;
{$IFDEF ANDROID}
var
  Intent: JIntent;
{$ENDIF}
begin
{$IFDEF ANDROID}
  Intent := TJIntent.Create;
  Intent := TJIntent.JavaClass.init(TJSettings.JavaClass.ACTION_LOCATION_SOURCE_SETTINGS);
  TAndroidHelper.Activity.startActivity(Intent);
{$ENDIF}
end;

 

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

А как это сделать автоматически? В данном скрине нажимаешь ОК и вуаля, работает...  GoogleMaps работают по такому же принципу.

Вот код на Котлине, возможно ли его транслировать на Delphi?

googleApiClient = GoogleApiClient.Builder(context!!)
        .addApi(LocationServices.API).build()
    googleApiClient!!.connect()
    locationRequest = LocationRequest.create()
    locationRequest!!.priority = LocationRequest.PRIORITY_HIGH_ACCURACY
    locationRequest!!.interval = 30 * 1000.toLong()
    locationRequest!!.fastestInterval = 5 * 1000.toLong()

    val builder = LocationSettingsRequest.Builder()
        .addLocationRequest(locationRequest!!)
    builder.setAlwaysShow(true)

    result =
       LocationServices.SettingsApi.checkLocationSettings(googleApiClient, builder.build())
    result!!.setResultCallback { result ->
        val status: Status = result.status
        when (status.statusCode) {
            LocationSettingsStatusCodes.SUCCESS -> {
               // Do something
            }
            LocationSettingsStatusCodes.RESOLUTION_REQUIRED ->
                try {
                    startResolutionForResult(),
                    status.startResolutionForResult(
                        activity,
                        REQUEST_LOCATION
                    )
                } catch (e: SendIntentException) {
                }
            LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE -> {
                // Do something
            }
        }
    }

Screenshot_2024-07-06-06-00-29-854_com.google.android.gms.jpg

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

           var LLocationRequest := TJLocationRequest_Builder.JavaClass.init(300)
                                      //.setDurationMillis(durationMillis: Int64) - Sets the duration of this request. - The default value is Long.MAX_VALUE.
                                      //.setGranularity(granularity: Integer) - Sets the Granularity of locations returned for this request. - The default value is Granularity.GRANULARITY_PERMISSION_LEVEL.
                                      .setIntervalMillis(300) //- Sets the desired interval of location updates.
                                      .setMaxUpdateAgeMillis(0) //- Sets the maximum age of an initial historical location delivered for this request. - The default value is IMPLICIT_MAX_UPDATE_AGE.
                                      //.setMaxUpdateDelayMillis(maxUpdateDelayMillis: Int64) - Sets the longest a location update may be delayed. - The default value is 0.
                                      //.setMaxUpdates(maxUpdates: Integer) - Sets the maximum number of updates delivered to this request. - The default value is Integer.MAX_VALUE.
                                     // .setMinUpdateDistanceMeters(0) // - Sets the maximum number of updates delivered to this request. - The default value is 0.
                                      .setMinUpdateIntervalMillis(100)// - Sets the fastest allowed interval of location updates.  - The default value is IMPLICIT_MIN_UPDATE_INTERVAL
                                      .setPriority(TJPriority.JavaClass.PRIORITY_HIGH_ACCURACY) // - Sets the Priority of the location request. - The default value is Priority.PRIORITY_BALANCED_POWER_ACCURACY.
                                      .setWaitForAccurateLocation(false)// - If set to true and this request is Priority.PRIORITY_HIGH_ACCURACY, this will delay delivery of initial low accuracy locations for a small amount of time in case a high accuracy location can be delivered instead. - The default value is true.
                                      .build();

           var LLocationSettingsRequest := TJLocationSettingsRequest_Builder.JavaClass.init
           .addLocationRequest(LLocationRequest)
           .setAlwaysShow(true)
           .build();


           FMessageSubscriptionID := TMessageManager.DefaultManager.SubscribeToMessage(
                                TMessageResultNotification,
                                HandleActivityMessage);
           MyOnFailureListener := TMyOnFailureListener.Create(Form1);
           MyOnFailureListener.onFailured := onFailureLocation;

           locTask := TJLocationServices.JavaClass.getSettingsClient(TAndroidHelper.Activity).checkLocationSettings(LLocationSettingsRequest);

           locTask.addOnFailureListener(MyOnFailureListener);
 procedure TForm1.onFailureLocation(e: JException);
 var
  resolve: JResolvableApiException;
begin
  resolve := TJResolvableApiException.Wrap((e as ILocalObject).GetObjectID);
  if resolve <> nil then
     resolve.startResolutionForResult(TAndroidHelper.Activity, 953798);
end;
procedure TForm1.HandleActivityMessage(const Sender: TObject; const M: TMessage);
begin
  LogCAAdd('HandleActivityMessage');
  if M is TMessageResultNotification then
    OnActivityResult(TMessageResultNotification(M).RequestCode, TMessageResultNotification(M).ResultCode,
      TMessageResultNotification(M).Value);
  LogCAAdd('HandleActivityMessage ok');
end;
function TForm1.OnActivityResult(RequestCode, ResultCode: Integer; Data: JIntent): Boolean;
begin
if RequestCode = 953798 then
  begin
    if ResultCode = TJActivity.JavaClass.RESULT_OK then
    begin
      LogCAAdd('isHardwareLocationEnabled RESULT_OK');

    end else
      if ResultCode = TJActivity.JavaClass.RESULT_CANCELED then
        begin
          LogCAAdd('isHardwareLocationEnabled RESULT_CANCELED');

        end;
  end;
end;
 TOnFailureListenerEvent = procedure(e: JException) of object;
 TMyOnFailureListener = class(TJavaLocal, JOnFailureListener)
  private
    [weak]
    FParent : TForm1;
    FOnFailureListenerEvent: TOnFailureListenerEvent;
  public
    constructor Create(AParent : TForm1);
    Destructor Destroy; Override;
    procedure onFailure(e: JException); cdecl;
    property onFailured: TOnFailureListenerEvent read FOnFailureListenerEvent write FOnFailureListenerEvent;
   end;

 

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

Плюс нужно подключить необходимые библиотеки и соответственно нужно описать недостающие интерфейсы java 

Ох, госпаде... А чего так много букофф получилось? И как это вообще работает?

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

Ох, госпаде... А чего так много букофф получилось? И как это вообще работает?

Ну это к Гуглу вопросы, у меня в приложении работает, как у вас на скрине.

Смысл такой вы создаёте запрос на определенный вид геолокации для вашего приложения в ответ получаете задачу для задачи определяете слушатель отсутствия геолокации. В слушателе обрабатываете "исключение" и если доступа нет, то запускаете действие с ответом. И обрабатываете ответ, нажал ли пользователь "ок" или нажал "нет, спасибо".(Пример как в delphi startActivityWithResult)

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

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

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

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

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

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

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

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

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

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