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

Yuriy2606

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

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

  • Посещение

  • Победитель дней

    2

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

  1. Здравствуйте коллеги.

    Переношу рабочий проект Android с 10.3.1 на 10.3.3. Уперся вот в такую проблему: в 64 бит приложение запускается, но спустя пару секунд выскакивает окно с надписью:

    External exception 1.

    Окно раз 10 мигает, после чего приложение падает. При этом постоянно закрывая окно можно поработать с приложением. В 32 бит полет нормальный.

    Пока нашел только вот этот ответ о том, что это баг Rio. Отключение функции покупки в приложении убирает ошибку, но это не вариант.

    Подскажите, как это решить?

    Заранее спасибо за ответ.

  2. Здравствуйте коллеги.

    Переношу рабочий проект Android с 10.3.1 на 10.3.3. Уперся вот в такую проблему в 64 бит приложение запускается, но спустя время выскакивает окно с надписью:

    External exception 1.

    Подскажите, как это решить?

    Заранее спасибо за ответ.

  3. Здравствуйте коллеги.

    Приложение работает на 10.3.1. Запускается в Windows версии на 10.3.2. Андроид версия 10.3.2 - падает сразу после старта.

    image.png.1928b21573e9a977ba346356902cee95.png

    Также заметил отсутствие множества библиотек. Подкидывал из прошлой версии, но падения при запуске не пропали.

    Может кто-то подскажет...

    Заранее спасибо за ответ.

     

  4. Здравствуйте.

    Проблема решилась очень просто - обновлением RAD до версии Embarcadero® Delphi 10.3 Version 26.0.33219.4899

    Ссылка на торрент https://softtorrent.ru/tt/3276.SoftTorrent.ru.torrent

    Предыдущую версию полностью удалил -> перезагрузка -> установка свежей версии.

    Заработало всё в штатном режиме.

     

  5. Здравствуйте коллеги.

    Приложение написанное на fmx прекрасно работает на Android 6, 8, на процессорах MTK. При этом пользователи начали жаловаться, что оно не работает на Android 9. Этот вопрос удалось решить

    Но затем выяснилось, что на процессоре Spreadtrum Unisoc SC9863A приложение также не работает, странно ведут себя rectangle, edit, button. Самый простейший проект (форма + кнопка + edit) заработал. Уже masterdetail из примеров не работает. SDK обновил до последней версии 29.

    Вывод: нужно ждать delphi 10.4? Или есть какое-то решение.

    Заранее спасибо за ответ.

  6. Решение:

    Do any of the following:

    1- Update the play-services-maps library to the latest version:

    com.google.android.gms:play-services-maps:16.1.0

    2- Or include the following declaration within the <application> element of AndroidManifest.xml.

    <uses-library
          android:name="org.apache.http.legacy"
          android:required="false" />

    Закинул сюда, может кому-то пригодится.

    Ссылки:

    https://stackoverflow.com/questions/50461881/java-lang-noclassdeffounderrorfailed-resolution-of-lorg-apache-http-protocolve

    https://www.delphiworlds.com/2019/02/a-fix-for-using-tmapview-on-android-9-devices/

  7.  На Android 6 и старше, ниже приведенный код работал без проблем.

          MyNotification:=Form1.NotificationCenter1.CreateNotification;
          try
          MyNotification.Name:='MyNotification';
          MyNotification.AlertBody:='Test';
          MyNotification.Number:=1;
          MyNotification.FireDate:=Now+EncodeTime(0,0,1,0);
          Form1.NotificationCenter1.ScheduleNotification(MyNotification);
          finally
          MyNotification.DisposeOf;
          end;

    Купил телефон с Android 8.1 Oreo и Local Notification перестали срабатывать.

    Решение: заменить ScheduleNotification на PresentNotification  (для кого это не критично).

    Следующий код работает без проблем

          MyNotification:=Form1.NotificationCenter1.CreateNotification;
          try
          MyNotification.Name:='MyNotification';
          MyNotification.AlertBody:='Test';
          MyNotification.Number:=1;
          MyNotification.FireDate:=Now+EncodeTime(0,0,1,0);
          Form1.NotificationCenter1.PresentNotification(MyNotification);
          finally
          MyNotification.DisposeOf;
          end;

    Почему так до конца не разбирался (помог метод "научного тыка"), хорошо было бы услышать мнение специалистов по этому поводу.

    Но думаю пусть будет здесь, может кому-то пригодится.

  8. Решение взято отсюда https://community.idera.com/developer-tools/general-development/f/tools-22/36905/help-delphi-locationsensor-not-giving-coordinates-anymore

    Цитата

     

    You have to manually comment the file "System.iOS.Sensors.pas" and then add this file to your project.  This workaround is only for iOS deployment.  If you are also running programs in Windows it will give you an error, you will have to remove the file from the project.

    "...\Embarcadero\Studio\20.0\source\rtl\common\System.iOS.Sensors.pas"

     and comment the line 151 as shown below:

    function locationManagerShouldDisplayHeadingCalibration(manager: CLLocationManager): Boolean; cdecl;
    //[MethodName('locationManager:didUpdateLocations:')]

    This should work.

     

    Думаю такие вещи должны быть тут.

  9. Здравствуйте.

    Delphi Rio

    При использовании LocationSensor в Android всё работает отлично. В iOS постоянно выдает NAN, не зависимо от аппарата и SDK.

  10. Здравствуйте коллеги.

    Внедряю в приложение вход через Facebook. Всё получилось, работает. Вот кусок кода:

    procedure TForm1.Auth;
    begin
      //WebForm:=Tfrm_OAuthWebForm.Create(nil);
      //WebForm. OnAfterRedirect:=AfterRedirect;
      OAuth2Authenticator1.AccessToken:=EmptyStr;
      OAuth2Authenticator1.ClientID:=cAppID;
      OAuth2Authenticator1.ClientSecret:=cAppKey;
      OAuth2Authenticator1.ResponseType:=TOAuth2ResponseType.rtTOKEN;
      OAuth2Authenticator1.AuthorizationEndpoint:=cEndPoint;
      OAuth2Authenticator1.RedirectionEndpoint:=cRedPoint;
      OAuth2Authenticator1.Scope:=cScopes;
      WebBrowser1.Visible:=true;
      WebBrowser1.Navigate(OAuth2Authenticator1.AuthorizationRequestURI);
      //WebForm.ShowWithURL(OAuth2Authenticator1.AuthorizationRequestURI);
    end;

    Пробовал использовать frm_OAuthWebForm и просто WebBrowser, работает и так и так. Но есть проблема: после захода в приложение, при постановке курсора на любой Edit, приложение виснет и вылетает.

    Стоит убрать WebBrowser - проблема исчезает. Наблюдается только в Android. Windows версия работает без нареканий.

    Если ответа не найду, то придется исключить Вход через FB, а не хочется.

    Заранее спасибо за ответ.

    Delphi 10.1 Berlin Version 24.0.22858.6822

  11. 2 минуты назад, Tumaso сказал:

    @Yuriy2606, нужно динамически запрашивать необходимые разрешения у пользователя

    Большое спасибо за ответ. Еще раз внимательнее все проверив у меня все таки получилось динамически запросить разрешения при помощи KastriFree  в Berline
       

    Запрос сделал так

     {cPermissionACCESS_COARSE_LOCATION = 'android.permission.ACCESS_COARSE_LOCATION';
        cPermissionACCESS_FINE_LOCATION = 'android.permission.ACCESS_FINE_LOCATION';
        cPermissionACCESS_NETWORK_STATE = 'android.permission.ACCESS_NETWORK_STATE';
        cPermissionCALL_PHONE = 'android.permission.CALL_PHONE';
        cPermissionCAMERA = 'android.permission.CAMERA';
        cPermissionINTERNET = 'android.permission.INTERNET';
        cPermissionREAD_EXTERNAL_STORAGE = 'android.permission.READ_EXTERNAL_STORAGE';
        cPermissionREAD_PHONE_STATE = 'android.permission.READ_PHONE_STATE';
        cPermissionWAKE_LOCK = 'android.permission.WAKE_LOCK';
        cPermissionWRITE_EXTERNAL_STORAGE = 'android.permission.WRITE_EXTERNAL_STORAGE'; }
    
     FRequester.RequestPermissions([cPermissionACCESS_FINE_LOCATION,cPermissionACCESS_COARSE_LOCATION,cPermissionREAD_EXTERNAL_STORAGE, cPermissionWRITE_EXTERNAL_STORAGE, cPermissionCAMERA], cPermissionsCodeExternalStorage);

    Обработка так

    procedure TForm1.PermissionsResultHandler(Sender: TObject; const ARequestCode: Integer; const AResults: TPermissionResults);
    begin
      case ARequestCode of
        cPermissionsCodeExternalStorage:
        begin
          if AResults.AreAllGranted then
            DoShow; //Что-то делаем
          else
            ShowMessage('You need to grant all required permissions for the app to be able to take photos!');
        end;
        cPermissionsCodeSMS:
        begin
          if AResults.AreAllGranted then
            ShowMessage('SMS permissions granted')
          else
            ShowMessage('You need to grant all required permissions for the app to be able to handle SMS!');
        end;
      end;
    end;

    Там в коде примера KastriFree все описано более подробно

    https://www.delphiworlds.com/2018/06/targeting-android-8-and-higher-continued/

    Вот ссылка, это для тех, у кого Berlin

  12. Здравствуйте коллеги.

    Написал приложение с необходимостью разрешений LocalSensor, MediaLibrary, Read/Write Storage и т.д. С АПИ Левел 14 все работало на ура. Дошел до выкладки на Play Market и уперся в API level 26. Нашел решение для Tokio (у меня Berlin) - KastriFree ( https://www.delphiworlds.com/2018/06/targeting-android-8-and-higher-continued/)

    попробовал реализовать как в статье и все равно не работает, приложение просто закрывается сразу после открытия. Ошибка I/O 17 в первом же месте обращения к файлам на карте памяти. Если в манифесте указать таргетлевел 14, то все нормально запускается и работает. Но такое приложение не пускает фильтр Play Marketa.

    Что делать? Как быть?

    И еще, думал скачать RAD 10.3 Community, получил на почту ключ, но на этапе установки после ввода ключа пишет, что не может обратиться к серверу.

    Если кто знает ответ - дайте ссылку, пожалуйста.

  13. Здравствуйте коллеги.

    Проблему с зависанием приложения решил при помощи отслеживания Hide приложения и MapView1.Visible:=false;

    Соответственно при возобновлении активности делаю MapView1.Visible:=true; Зависания почти пропали на 90%.

    Прыгающий GPS я победил отключением WiFi/GSM локации. Оставил только GPS. Как-то это костыльно, масса пользователей

    до этого не догадаются и на карте будет куча прыгающих машин.

  14. Здравствуйте коллеги. Приятно, что есть люди, готовые помочь :)

    Проблема следующая: Программа содержит карту MapView на которую наносятся маркеры в динамике (раз в 10 сек передвигаются машинки по карте). Все нормально работает пока я не перейду к другой активности. После возобновления моей активности, с вероятностью 50\50, приложение не отображается, просто черный экран, иногда на черном экране появляются кнопки Google карты. Помогает снятие процесса приложения и запуск его заново. Проверено на двух девайсах. Методом логирования я вычислил, что приложение падает тут:

      begin
        try
        mapPolygon.DisposeOf; //тут исключение
        except
        end;
        SetLength(Outline,5);
        Outline[0]:=TMapCoordinate.Create(VLLat, VLLon);
        Outline[1]:=TMapCoordinate.Create(VLLat, NPLon);
        Outline[2]:=TMapCoordinate.Create(NPLat, NPLon);
        Outline[3]:=TMapCoordinate.Create(NPLat, VLLon);
        Outline[4]:=TMapCoordinate.Create(VLLat, VLLon);
        Plg:=TMapPolygonDescriptor.Create(Outline);
        Outline:=nil;
        Plg.StrokeColor := TAlphaColorRec.Slateblue;
        Plg.StrokeWidth := 3;
        Plg.Geodesic := True;
        Plg.ZIndex := 0.9;
        //Plg.FillColor := TAlphaColorRec.Yellow;
        try
        mapPolygon := Form1.MapView1.AddPolygon(Plg); //зависает тут, и это при наличии try except
        except
        end;
      end;

    Ставил перехват события сворачивания приложения и запрет на обновление карты при этом. Но это не помогло. В приложении используются потоки типа:

     TThread.CreateAnonymousThread(procedure ()
      begin

              TThread.Synchronize(nil,
              procedure
              begin
                 
              end);

     
      end).Start;

    Вышеуказанная отрисовка в основном потоке, по таймеру. Может в  этом причина? Одним словом не знаю что делать. Пока смирился, но надеюсь на лучшее.

    И еще, вычислил только что: в приложении используется LocationSensor1.Sensor и для отладки я использую FakeGPS. Почему-то LocationSensor1.Sensor в большинстве случаев выдает правильные координаты из FakeGPS, а иногда те, которые он получает по wifi/gsm. При этом на улице, с отключеным Fake GPS, наблюдается то же самое, но реже. Это странно. При этом синяя точка на карте отображается в правильном месте.

    Может кто-то сталкивался? Заранее спасибо за ответы. :)

    10.1 Berlin

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