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

OnePeople

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

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

  • Посещение

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

    57

Весь контент OnePeople

  1. Здесь все зависит от того, как сделано в android. Следовательно вам всегда в первую очередь нужно смотреть справку developer.android.com. Все что ниже это то как делаю я, не истина, так как мне для хобби достаточно. На примере 1. JConnectivityManager. Захожу в справку, ищу JConnectivityManager, открываю пример работы с API. Вижу код: ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); Начинаю переписывать на Delphi (паскале, не считаю) и вижу что getSystemService возвращает JObject. Если мы получаем не определенный объект то нам нужно сопоставить его с определенным классом, так сказать объект обернуть в класс НАШКЛАСС.ОБЕРНУТЬ(ИД_ОБЪЕКТА) TJConnectivityManager.Wrap((ConnectivityServiceNative as ILocalObject).GetObjectID); Если же объект создается методом new, тогда мы можем просто использовать init, create. (В чем разница я не знаю AudioFocusRequest:=TJAudioFocusRequest_Builder.JavaClass.init(TJAudioManager.JavaClass.AUDIOFOCUS_GAIN); AudioFocusRequest:=TJAudioFocusRequest_Builder(TJAudioManager.JavaClass.AUDIOFOCUS_GAIN).Create; Я пользуюсь обоими видами конструкцию, но предпочитаю init ) 2.Захожу в справку, ищу JWifiNetworkSpecifier, вижу Apps should use the WifiNetworkSpecifier.Builder class to create an instance. Соответственно Network specifier object создается строителем, перехожу дальше в WifiNetworkSpecifier.Builder, смотрю там и так далее. Есть всякие костыли и идеи людей решающие многие проблемы, но я вам так скажу у вас не будет проблем если вы будете делать так как вам советует гугл, а если и будут, то на китайских устройствах где по какой то причине китайцы просто что то сломали в системе и заменили это своим хламом не отвечающим требованиям гугл(Обычно телефон и BT). Единственная помарка, в Delphi бывает отсутствует все API, и некоторые вещи, вообще не реализованы, но их очень мало и они очень специфические. .
  2. WifiNetworkSpecifier.Builder builder = new WifiNetworkSpecifier.Builder(); builder.setSsid("wifi-ap-ssid"); builder.setWpa2Passphrase("wifi-ap-password"); Вот это добавлено только для API 29 и выше NetworkSpecifierObj:= TAndroidHelper.Context.getSystemService(TJContext.JavaClass.CONNECTIVITY_SERVICE); NetworkSpecifier:= TJNetworkSpecifier.Wrap((NetworkSpecifierObj as ILocalObject).GetObjectID); Чушь полная, вы запрашиваете сервис соединений ConnectivityManager, а NetworkSpecifier это абстрактный класс он не создается вообще его получают от другого API. WifiNetworkSpecifier и NetworkSpecifier это разные вещи, вам нужен именно WifiNetworkSpecifier. var ConnectivityManagerNative: JObject; ConnectivityManager: JConnectivityManager; NetworkRequest_Builder: JNetworkRequest_Builder; NetworkRequest: JNetworkRequest; WifiNetworkSpecifier: JWifiNetworkSpecifier; WifiNetworkSpecifier_Builder: JWifiNetworkSpecifier_Builder; begin WifiNetworkSpecifie_Builder:= TJWifiNetworkSpecifier.JavaClass.init; WifiNetworkSpecifie_Builder.setSsid("wifi-ap-ssid"); WifiNetworkSpecifie_Builder.setWpa2Passphrase("wifi-ap-password"); WifiNetworkSpecifier := WifiNetworkSpecifie_Builder.build; NetworkRequest_Builder := TJNetworkRequest_Builder.JavaClass.init; NetworkRequest_Builder.addTransportType(TJNetworkCapabilities.JavaClass.TRANSPORT_WIFI); NetworkRequest_Builder.setNetworkSpecifier(wifiNetworkSpecifier); NetworkRequest := NetworkRequest_Builder.build; ConnectivityManagerNative := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.CONNECTIVITY_SERVICE); connectivityManager := TJConnectivityManager.Wrap((ConnectivityManagerNative as ILocalObject).GetObjectID); connectivityManager.requestNetwork(NetworkRequest, callback);
  3. Вы можете его даже не создавать TJNetworkCapabilities.JavaClass.TRANSPORT_WIFI
  4. Google. Все Ansi команды поддерживают многобайтовые символы и символы с диакритическим знаком.
  5. А чего вы хотите добиться?
  6. Проблема в том, что это вы решили что должно работать так. Триггеры работают от первого дочернего элемента, т.к. аниматор должен знать, свойство какого компонента должен отрабатывать триггер. Допустим у вас 10 вложений анимации и компонентов как бы последняя анимация узнавала, что именно свойство mouseover этого компонента нужно отрабатывать, а не другого? П.с. вы всегда можете сами все написать и переделать, создать свой компонент.
  7. А зачем на экране в целом? Всплывающая информация будет в отдельной форме? Если нет то LocalToAbsolute Если да то LocalToAbsolute.position.x + form.left и LocalToAbsolute.position.y + form.top
  8. TTelephonyManager_UssdResponseCallback = class(TJavaLocal, JTelephonyManager_UssdResponseCallbackClass) procedure onReceiveUssdResponse(TelephonyManager: JtelephonyManager; request: JString; response: JCharSequence); cdecl; var TelephonyManager: JTelephonyManager; TelephonyManagerNative: JObject; ResponceCallBack: JTelephonyManager_UssdResponseCallback; handler: JHandler; begin TelephonyManagerNative := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.TELEPHONY_SERVICE); TelephonyManager := TJTelephonyManager.Wrap((TelephonyManagerNative as ILocalObject).GetObjectID); ResponceCallBack := TJTelephonyManager_UssdResponseCallback.JavaClass.init; handler := TJHandler.JavaClass.init; TelephonyManager.sendUssdRequest(StringToJString('*100#'), ResponceCallBack, handler); Дальше сами
  9. ну да, это не мое решение так разделить, написал на скорую для Вас function checkNetwork: Boolean; var ConnectivityServiceNative: JObject; cm: JConnectivityManager; activeNetwork: JNetworkInfo; begin try // подключаемся к сервису (в данном случае соединений) ConnectivityServiceNative := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.CONNECTIVITY_SERVICE); // если не подключились то выход c результататом функции FALSE if not Assigned(ConnectivityServiceNative) then exit(false); // получаем менеджер соединений cm := TJConnectivityManager.Wrap((ConnectivityServiceNative as ILocalObject).GetObjectID); // если не получили то выход c результататом функции FALSE if not Assigned(Result) then exit(false); // запрашиваем информацию о активном соединении activeNetwork := cm.getActiveNetworkInfo; // если есть информация и статус соединения подключено то результат функции TRUE Result := Assigned(ActiveNetwork) and ActiveNetwork.isConnected; except // при любой ошибке выход c результататом функции FALSE Exit(false); end; end;
  10. Для API >= 14 и API < 29 Intent := TJIntent.Create(); Intent.setAction(TJIntent.JavaClass.ACTION_INSTALL_PACKAGE); Intent.addFlags(TJIntent.JavaClass.FLAG_GRANT_READ_URI_PERMISSION); Intent.putExtra(TJIntent.JavaClass.EXTRA_NOT_UNKNOWN_SOURCE, true); Intent.setDataAndType(ApkUri,StringToJString('application/vnd.android.package-archive')); TAndroidHelper.Activity.StartActivity(Intent); API > 25 Manifest.permission.REQUEST_INSTALL_PACKAGES
  11. function checkNetwork: Boolean; function GetConnectivityManager: JConnectivityManager; var ConnectivityServiceNative: JObject; begin ConnectivityServiceNative := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.CONNECTIVITY_SERVICE); if not Assigned(ConnectivityServiceNative) then exit; Result := TJConnectivityManager.Wrap((ConnectivityServiceNative as ILocalObject).GetObjectID); if not Assigned(Result) then exit; end; var cm: JConnectivityManager; activeNetwork: JNetworkInfo; begin try cm := GetConnectivityManager; activeNetwork := cm.getActiveNetworkInfo; Result := Assigned(ActiveNetwork) and ActiveNetwork.isConnected; except Result := false; end; end;
  12. )))Ну наверное при том что вы пишете для андроид, а самое верное это сделать то что советует Гугл. А в Делфи там переделывать 5 секунд. Если вы этого не можете переделывать код из java в Делфи и не хотите учиться этому, совет, не пишите для андроид вообще/
  13. не наоборот, я приложение для телика тестировал на телефоне, чтобы его туда постоянно не устанавливать)))
  14. Всё верно, но вот мне потребовалось чтобы приложение одинаково выглядело и на телевизоре fullhd и на смартфоне fullhd и тогда без масштабирования выходила шняга полная, но это очень редкая ситуация)
  15. Все зависит от разрешения в котором запускается приложение оно может быть меньше чем разрешение экрана и просто масштабироваться, я решаю это свойством scale. var ScreenService: IFMXScreenService; begin Result := 1; if TPlatformServices.Current.SupportsPlatformService (IFMXScreenService, IInterface(ScreenService)) then begin Result := ScreenService.GetScreenScale; // Получаем текущий масштаб Выставляем элементам нужный масштаб end;
  16. Где код, как вы получаете S? Ну и скрин deployment для Android 64? Прошу заметить что Android чувствителен к регистру File и file это разные папки.
  17. Тогда делать в базе пометку открыт или закрыт!? Или создавать базу(список) с индексами открытых элементов
  18. https://docwiki.embarcadero.com/RADStudio/Sydney/en/FireMonkey_Save_State Если пользуетесь переводчиком, на родном языке тоже оставляйте пост или спойлер!
  19. if (focusChange=TJaudioManager.JavaClass.AUDIOFOCUS_LOSS) or (focusChange=TJaudioManager.JavaClass.AUDIOFOCUS_LOSS_TRANSIENT)
×
×
  • Создать...