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

beklexx

Пользователи
  • Постов

    67
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные beklexx

  1. 11 часов назад, Pax Beach сказал:

    Просто не давать права на mock location. В новых версиях Android mock можно использовать только для приложения, у которого такое разрешение включено.

    Хмм, тогда интересно, является ли триангуляция/определение по wi-fi mock location?

    Хотя это не логично, я так понял mock это разрешение получать gps не от сенсора. Тогда интересует, с какой версии андроида идёт ограничение на mock? 

  2. если кому лень искать инфу, может пригодится... на основе ответа от Akad для google maps

    uses
      Androidapi.Helpers, Androidapi.JNI.GraphicsContentViewText
    
    ...
      
    var Intent: JIntent;
    begin
      Intent := TJIntent.Create;
      Intent.setAction(TJIntent.JavaClass.ACTION_VIEW);
      try
        Intent.setData(StrToJURI('google.navigation:q='+GX+','+GY+'&mode=d')); //если есть google maps
      except
        Intent.setData(StrToJURI('https://www.google.com/maps/dir/?api=1&destination='+GX+','+GY+'&travelmode=driving')); //иначе открываем ссылку в браузере
      end;
      SharedActivity.startActivity(Intent);
    end;

     

  3. В 02.06.2016 в 21:50, Pax Beach сказал:

    В общем, я не хочу, чтобы пользователи обманывали сервер, и подставляли фэйк-координаты.

    А как определить, что фэйк для моего приложения разрешен в параметрах разработчика, не понимаю.

    Случаем, не нашли решение?

  4. В 14.08.2016 в 17:34, dmdel сказал:

    Можете показать, как программно засовываете данные в ListView + данные в Tag?

    для заполнения листвью юзаю подобное решение

    procedure TFVisit.bListViewFill(LV: TListView; FDSource: TFDQuery; TextField, DetailField, TagField: string; IsClear: boolean);
    var i, index: integer;
        item: TListViewitem;
    begin
      if LV.Selected <> nil
        then index:= LV.Selected.Index
        else index:= -1;
        
      if FDSource.IsEmpty then
        begin
    //      ShowMessage('Нет данных!');
          LV.Items.Clear;
          exit;
        end;
      if IsClear then LV.Items.Clear;
      LV.BeginUpdate;
      try
      for i:= 1 to FDSource.RecordCount do
        begin
          FDSource.RecNo:= i;
          item:= LV.Items.Add;
          item.Text:= FDSource.FieldByName(TextField).AsString;
          item.Detail:= FDSource.FieldByName(DetailField).AsString;
    //      item.Bitmap.Assign(...)  
          item.Tag:= FDSource.FieldByName(TagField).AsInteger;
        end;
      finally
        LV.EndUpdate;
      end;
    
      if index = -1 then exit;
      if (LV.Items.Count >= index) then LV.ItemIndex:= index;
    end;

    ну и заполняю

    tbPriceList: TFDQuery; 
    .
    .
    .
    tbPriceList.Open; //фильтрованный по необходимым условиям
    bListViewFill(ListView1, tbPriceList, 'Name', 'LCP_Qty', 'ProductId', True);
    tbPriceList.Close;

    Мне часто приходится работать с листвью где text, detail и tag... но иногда приходится юзать остальной функционал листвью: хидеры-шмидеры, имейджи и т.д. но это уже другой вопрос

  5. попробуйте OnDeletingItem

    у меня к примеру такая конструкция норм работает: (правда Bind Visually не юзаю... а в таг каждого итема засовываю нужный ключ)

    procedure TFVisitPhotoComment.ListView1DeletingItem(Sender: TObject;
      AIndex: Integer; var ACanDelete: Boolean);
    begin
      ...
      ...'delete bla-bla-bla where Id = :Id';
      ...ParamByName('Id').Value:= ListView1.items[AIndex].Tag;
      ...
      
      //не забываем ...
      ACanDelete := True;
      //ну или отмена удаления при необходимости
      ACanDelete := False;
    end;

     

  6. 22 часа назад, krapotkin сказал:

    а при чем тут андроид?

    тут как раз решение в общем виде

    а, ну да))... в решение же TMapView не участвует ... (пользуясь темой) а TMapView на винде под FMX работает?

  7. я обычно проверяю связь до сервака, прежде чем SQLConnection врубать... чем то типа:

    function Tdm.CheckConnect: boolean;
    var res: boolean;
    begin
      try
        IdTCPClient1.ReadTimeout:= 10000;
        IdTCPClient1.ConnectTimeout:= 10000;
        IdTCPClient1.Connect;
        IdTCPClient1.Disconnect;
        res:=true;
      except
        res:=false;
      end;
      Result:= res;
    end;

    установив мои IdTCPClient1.Port и IdTCPClient1.Host

  8. также как и в первый раз

    if NOT(dm.SQLConnection1.Connected) then
      try
        dm.SQLConnection1.Connected:= True;
    ....

    хотя если реально при отключении связи не происходит дисконнект, то 

    if dm.SQLConnection1.Connected then dm.SQLConnection1.Connected:= False;
    try
      dm.SQLConnection1.Connected:= True;
    ....

     

  9. 15 часов назад, krapotkin сказал:

    выбрать из общего числа только те, что в радиусе R

    мб пригодится кому... моё решение (android)

    добавил в прогу TFDSQLiteFunction соединил к FDPhysSQLiteDriverLink и выставил следующее значения: Active = True, ArgumentsCount = 4, FunctionName = 'GPSDist' и в свойстве OnCalculate прописал следующее:

    procedure Tdm.FDSQLiteFunction1Calculate(AFunc: TSQLiteFunctionInstance;
      AInputs: TSQLiteInputs; AOutput: TSQLiteOutput; var AUserData: TObject);
    begin
      AOutput.AsInteger:= Round(1609.344 * 3958.75 * arccos(
        sin(StrToFloat(AInputs[0].AsString)/57.2958) *
        sin(StrToFloat(AInputs[2].AsString)/57.2958) +
        cos(StrToFloat(AInputs[0].AsString)/57.2958) *
        cos(StrToFloat(AInputs[2].AsString)/57.2958) *
        cos(StrToFloat(AInputs[3].AsString)/57.2958 - StrToFloat(AInputs[1].AsString)/57.2958)));
    end;

    формула взята отсюда: источник ... имейте ввиду что тут не учтено что земля не совсем правильная сфера... т.е. есть небольшая неточность, но для моих целей было достаточно.

    Далее добавленная функция юзалась при выборе точек из SQLite. По типу:

    select ...
    from .....
    where GPSdist(:CenterX, :CenterY, GPSX, GPSY) <= :Dist

     

  10. эмм... а речь о переподключении к какому серваку?... от клиента к DS или от DS к какому нибудь серваку?

    если от клиента к DS то у SQLSonnection есть свойство AfterDisconnect. Имхо, стоит избегать постоянного коннекшна, если конечно это возможно. У меня обычно по необходимости подымается коннешн и отрубается после завершения синхронизации.

    если второй вариант ... то аналогичное свойство используемого компонента подключения

     

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

  12. 1 час назад, krapotkin сказал:

    ой йо  этот LiveBinding

    не так уж сложно заполнить через Query грид вручную...

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

  13. 2 часа назад, Vitaldj сказал:

    Насколько я помню, Union это простое соединение запросов и никакие дубли он отсеивать не может.

    по крайней мере в ms sql он именно этим и отличался от UNION ALL

    гугл вроде подтверждает первой ссылкой на sqlite union: http://www.tutorialspoint.com/sqlite/sqlite_unions_clause.htm

    The SQLite UNION clause/operator is used to combine the results of two or more SELECT statements without returning any duplicate rows.

    The UNION ALL operator is used to combine the results of two SELECT statements including duplicate rows.

  14. мб просто UNION, он по определению отсеивает дубли

    select ron.datatimeon, roff.datatimeoff
    from regesteron ron left join regesteroff roff on ron.dataon = roff.dataoff
    union
    select ron.datatimeon, roff.datatimeoff
    from regesteroff roff left join regesteron ron on ron.dataon = roff.dataoff

     

  15. upd 1 хз... но просто seattle 100500 раз протестен на дроидах 5+... полёт нормальный (Jelly Bean, KitKat, Lollipop)... есть даже несколько положительных тестов на Marshmallow

  16. 26 минут назад, Rusland сказал:

    ListViewHelper в новой версии не работает. Вся надежда на ZuBy )

    http://i.piccy.info/i9/f722ebe1c12a20d4da02a868563e3b22/1461061559/12498/955466/LsvHelper.png

    А какая-нибудь инструкция есть как работать с новым редактором ListView?

     

    http://docwiki.embarcadero.com/RADStudio/Berlin/en/Customizing_FireMonkey_ListView_Appearance

  17. 11 минуту назад, Rusland сказал:

    Как отдельно установить Android SDK/NDK не переустанавливая Студию? (при установке снимал галочки)

    http://docwiki.embarcadero.com/RADStudio/Berlin/en/Adding_an_Android_SDK

    Больше скажу... я не снимал эти галочки... хз почему, поставилость только sdk, пришлось докидывать ndk))

    из 10ки закинь просто в папку C:\Users\Public\Documents\Embarcadero\Studio\18.0\PlatformSDKs...

  18. 3 минуты назад, Rusland сказал:

    Что значит "и вторая уже швах"? Вы имеете в виду что она определилась по БС и слишком далеко от реального местоположения?

    ага... стояла к примеру задача: один чел прошёл некие объекты и снял их координаты, через некоторое время выдвигается второй чел по этим координатам и вот тут, когда он понимает что точность всего лишь +- километр, наступает печалька. В данный момент первому челу приходится перепроверять снятые GPS координаты обзором их на карте, от чего хотелось бы избавится.

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