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

Satellite

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

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

  • Посещение

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

    2

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

    1. Скачать отдельно SDK, можно обновить при необходимости. 
    2. При установке Seattle установить только NDK (пути оставить по умолчанию). У кого стоит уже Seattle и NDK можно пропустить.
    3. Прописать путь к новому SDK как у меня в настройках Android.
    4. По желанию можно поставить JDK той же версии, как и у меня. 

    01.png 02.png02.png

  1. Исправление проблемы с обновлением бара на Android 5.1:

    В настройках проекта выбираем No TitleBar:

    Project -> Options -> Version Info -> Theme: No TitleBar.

    Код события Onresize необходимо переместить в конец Onshow, т.к. в Onresize перестанет возвращаться высота бара. D:

    После выполнения этих действий, должно работать нормально на любом устройстве.

  2. if (TJKeyCharacterMap.JavaClass.deviceHasKey(AKEYCODE_BACK)) and (TJKeyCharacterMap.JavaClass.deviceHasKey(AKEYCODE_MENU)) then

    Всё равно значение true передаётся, но navigationbar'a помине нет в системе. :huh:

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

    To determine the presence of a hardware keys, this method is the easiest:

    .
    .
    uses
      Androidapi.KeyCodes,
      Androidapi.JNI.GraphicsContentViewText,
    .
    .
      TJKeyCharacterMap.JavaClass.deviceHasKey(AKEYCODE_BACK) //To detect hardware BACK
      TJKeyCharacterMap.JavaClass.deviceHasKey(AKEYCODE_MENU) //To detect hardware MENU
    .
    .

    Result for deviceHasKey is Boolean.

    All keycode constants can be found in unit Androidapi.KeyCodes.

    Источник

    З.Ы. Остаётся лишь написать проверку и тестить. 

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

    есть еще один вариант (но не нашел его в интерфейсах, не объявлен)

    Встречал одно независимое решение: Ищем разницу между realSize.y и screenSize.y, сравниваем разницу с высотой navigationbar'a. Если (difference == navBarHeight), то navigationbar в системе есть.

    @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
    public boolean hasNavBar(Context context) {
        Point realSize = new Point();
        Point screenSize = new Point();
        boolean hasNavBar = false;
        DisplayMetrics metrics = new DisplayMetrics();
        this.getWindowManager().getDefaultDisplay().getRealMetrics(metrics);
        realSize.x = metrics.widthPixels;
        realSize.y = metrics.heightPixels;
        getWindowManager().getDefaultDisplay().getSize(screenSize);
        if (realSize.y != screenSize.y) {
            int difference = realSize.y - screenSize.y;
            int navBarHeight = 0;
            Resources resources = context.getResources();
            int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android");
            if (resourceId > 0) {
                navBarHeight = resources.getDimensionPixelSize(resourceId);
            }
            if (navBarHeight != 0) {
                if (difference == navBarHeight) {
                    hasNavBar = true;
                }
            }
    
        }
        return hasNavBar;
    
    }

    Источник

  5. 21 минуту назад, ZuBy сказал:

    проверьте на андроид 5.1 вариант с Window.addFlags

    Проверил чисто с Window.addFlags, проблема на месте. Также пробовал и с Window.addFlags, и с Window.setFlags вместе.

    З.Ы.: Также меня интересует, какое значение возвращается с getIdentifier (resourceID) на nexus? По идеи должно вернуть 17956965. Просто на Android 5.1, getBoolean(resourceID) возвращает true. :huh:

  6. 10 минут назад, ZuBy сказал:

    что за девайс?

    Sony Xperia XA (Android 6.0), на нём и проблемки.

    Всё прекрасно работает с проверкой значения config_showNavigationBar, правда на Android 5.1 проблема с обновлением (только после смены ориентации экрана - закрашивается статус-бар).

  7. if not TJKeyCharacterMap.JavaClass.deviceHasKey(TJKeyEvent.JavaClass.KEYCODE_BACK) then

    Хотелось бы уточнить по данной проверке, ведь она не на всех смартфонах срабатывает. Да и вообще нет надежного способа проверить есть ли navigationbar.

    На Android 5.1 (без navigationbar), c аппаратными кнопками, условие if not работает, бар не показывается, потому что его нет, но на Android 6.0 (с navigationbar), без аппаратный кнопок, это условие уже не работает, navigationbar не заливается, хотя он есть в системе.

    5.1.jpg 6.0.jpg

    Если изменить проверку на if (без not), на Android 6.0 navigationbar заливается, однако, navigationbar становится виден и на Android 5.1 (если обновить форму), хотя в системе он не поддерживается (естественно, потому что проверка не верна). 

     5.1.jpg 6.0.jpg

    Можно попробовать проверять значение config_showNavigationBar, что-то вроде этого:

    resourceID:=TAndroidHelper.Activity.getResources.getIdentifier(StringToJString('config_showNavigationBar'),  StringToJString('bool'), StringToJString('android'));

    Строка возвращает следующий набор значений:

    Значение: "17956965" если navigationbar есть, "17956955", если его нет. Как можно сконвертировать в привычные 0 или 1?

  8. Имеется стандартный код вывода уведомления в потоке:

    procedure TMyThread.Execute;
    var
      MyNotification: TNotification;
    begin
      MyNotification := NotificationsForm.NotificationCenter1.CreateNotification;
      try
        MyNotification.Name := 'Windows10Notification';
        MyNotification.Title := 'Windows 10 Notification #1';
        MyNotification.AlertBody := 'RAD Studio 10 Seattle';
        NotificationsForm.NotificationCenter1.PresentNotification(MyNotification);
      finally
        MyNotification.Free;
      end;
    end;

    Проблема в том, что в потоке уведомление не срабатывает. С чем это связано, и как это можно завести?

  9. В документации следующее: 

     

    TInAppPurchase не предоставляет никаких способов выяснить, является ли продукт расходуемым или нерасходуемым. Когда пользователь покупает расходный материал, необходимо вызвать ConsumeProduct.

     

    Правильно-ли я понял, если у меня используется расходный материал, мне следует вызывать FInAppPurchase.ConsumeProduct(product) вместо FInAppPurchase.PurchaseProduct(product)?

     

    А дальше уже обрабатывать в FInAppPurchase.OnConsumeCompleted?

     

    Также было написано, что в качестве альтернативы, можно вызывать ConsumeProducts со списком идентификаторов продукта.:

    procedure ConsumeProducts;
    var
      products: TStringList;
    begin
      products := TStringList.Create;
      if FInAppPurchase.IsProductPurchased(product1) then
        products.Add(product1);
      if FInAppPurchase.IsProductPurchased(product2) then
        products.Add(product2);
      if FInAppPurchase.IsProductPurchased(product3) then
        products.Add(product3);
      if FInAppPurchase.IsProductPurchased(product4) then
        products.Add(product5);
      FInAppPurchase.ConsumeProducts(products);
    end;
    

    Тоже не совсем понятно, что даёт мне список идентификаторов продукта. 

  10. Заработало! Сразу прошу простить если так было нельзя. Я скопировал либку из папки с армовскими и закинул в х86. И заработало, но с тормозами. Скорее всего это из-за того, что в х86 прошивку сразу запихали библиотеки которые позволяют запускать армовские приложухи.

    У моего пользователя, смартфон на Intel® Atom™ Z2520. Сам проверить не могу, но я ему верю. (MultiPad Thunder 7.0i)

  11. Какой путь Вы указываете в Deployment для загружаемых файлов?

    Деплоятся в .\assets\level\

     

    Возможно, из-за присваивания Installlocation: preferexternal, приложение ставится в External, если система разрешает. А файлы в данном случае заливаются в External или Internal ?

  12. Прочитал данную темку. Изменил файлик FMX.Helpers.Android.pas, прикрепил к проекту и ничего не изменилось. Окно как было старым, так и осталось (Messagedlg). Может быть что-то помимо этого нужно сделать?

    function GetNativeTheme: Integer;
    var
      LStyleDescriptor: TStyleDescription;
    begin
      Result := 0;
      if not IsGingerbreadDevice and (Screen <> nil) and (Screen.ActiveForm <> nil) and
        (Screen.ActiveForm.StyleBook <> nil) then
      begin
         LStyleDescriptor := TStyleManager.FindStyleDescriptor(Screen.ActiveForm.StyleBook.Style);
        // the original code -->GetThemeFromDescriptor(LStyleDescriptor);
        // the next line has the modified code to set the result
        Result := GetThemeFromDescriptor(LStyleDescriptor);
      end;
    end;
    
    function GetNativeTheme(const AControl: TControl): Integer;
    var
      LStyleDescriptor: TStyleDescription;
    begin
      Result := 0;
      if not IsGingerbreadDevice then
      begin
        LStyleDescriptor := TStyleManager.GetStyleDescriptionForControl(AControl);
        // GetThemeFromDescriptor(LStyleDescriptor);
        Result := GetThemeFromDescriptor(LStyleDescriptor);  // <--here the result assignment was missing
      end;
    end;

    Окно должно стать таким:

    post-478-0-53068300-1430497529.png

  13.  m.LoadFromFile(TPath.GetSharedDocumentsPath + '/level/' + inttostr(x) + '.' + PictExt);
    

    Загружается файл вот таким образом, загружается нормально, но на некоторых устройствах: Lenovo S820, Lenovo A516, Explay Fresh, да и возможно многих других, пишет: "File not found". Мне кажется, пользователь, либо принудительно установил приложение в External, либо внутренний путь чем-то отличается, откуда и возникает ошибка. В чём может быть казус данной проблемы?

  14. Почему-то никто не акцентирует внимание что в XE8 убрали версии 2.3 Adroid'a из списка поддерживаемых.

    Где вы это прочитали? XE8 поддерживает некоторые устройства на Android 2.3. Но замечу, поддерживать версии ниже 4.0 я не вижу смысла, поэтому рекомендую использовать API не ниже 14. Приведу пример, устройства, работающие на 2.3-3.x очень слабые, Firemonkey весьма много требует, и на некоторых устройствах, чтобы запустить приложение, просто навсего не хватает мощности/оперативки. Отсюда пойдут гневные отзывы, плохие оценки, что весьма не радужно. Пишу в основном в Android Studio, там можно себе позволить такое. :)

     

    dd2d7af53cce.jpg

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