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

Andrey Efimov

Модераторы
  • Постов

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

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

    123

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

  1. Ну смотрите:

    1) Как я уже говорил, вам необходимо ознакомиться с основами транслирования и использования АПИ.

    Например тут: Как создавать обёртки для JAVA-кода и тут: Как подключить и использовать свой JAVA-класс (статьи "малость" старые, но суть сохранилась.)

    Единственное, что могу добавить (про обёртки):

    Всё, что находится в interface(JObjectClass) вызывается так: TJНазваниекласса.JavaClass.НазваниеМетода/Поля

    Всё, что находится в interface(JObject) вызывается только через предварительно созданный/полученный объект.

     

    2) На форуме, для кода используйте тег "Код", без подсветки кода (или как вам угодно). Это помогает повысить читабельность поста, отделить код от текста. Если вы используете обёртку не из стандартной поставки, то прикладывайте её к посту. Не редкость, что ошибки бывают в самих обёртках.

    3) Из-за первого пункта вы начали копировать другие решения (не обдумывая). Я буду исходить из вашего изначального кода.

    Вам должно быть достаточно подключения AndroidAPI.JNI.GraphicsContentViewText, там всё уже реализовано (это я про обёртку для использования JBitmap и JBitmapFactory).

    Далее моё "гадание на кофейной гуще" (т.к. обёртку для WallpaperManager в вашем сообщении я не вижу).

    Исхожу из того, что она сгенерирована правильно. Значит в вашем коде, перед использованием метода setBitmap(Image); необходимо получить доступ к объекту WallpaperManager. Заходим по ссылке Android API: WallpaperManager, смотрим на описание и методы, видим метод Android API: WallpaperManager#getInstance, делаем вывод, что с помощью этого метода сможем получить доступ к объекту WallpaperManager, а далее попытаться использовать метод setBitmap. На этом, моё предсказание завершено (само собой не факт, что оно верное, но если бы передо мной стояла такая задача, то в самом начале, я поступил бы именно так), остаётся только попробовать.

     

     

    p.s. Автоматический генератор обёрток иногда сбоит, рекомендую всегда проверять генерируемые обёртки. Результаты этих сбоев встречались как в личном опыте, так и у других разработчиков на форуме.

  2. Для стандартного АПИ, в большинстве случаев, достаточно иметь только обёртку (.pas файл).

    Какая то часть обёрток для АПИ всегда идёт со студией в комплекте (найти можно тут: C:\Program Files (x86)\Embarcadero\Studio\версиястудии\source\).

    Если нужной вам обёртки нет в комплекте со студией, то либо генерите её самостоятельно, либо скачиваете с GitHub'а. На форуме есть упоминание об этом: Полностью транслированное Android API 7-23 уровня

    Для сторонних jar - библиотек, необходимо иметь саму библиотеку в виде jar файла и обёртку к ней.

     

    В вашем случае, должно хватить (если не брать во внимание callback OnColorsChangedListener) простого указания .pas файла в секции uses вашего приложения.

     

    p.s. Все начальные вопросы уже много раз обсуждались на форуме и в различных блогах, ищите, читайте, пробуйте :)

    p.s.2. Можете "покопаться", например, тут (https://delphifmandroid.blogspot.com/p/blog-page_27.html), тут (https://github.com/AndrewEfimov) и тут (http://yaroslavbrovin.ru/). Ну и конечно же, если вы хотите использовать специфичные функции Андроида, то необходимо ознакомиться https://developer.android.com

  3. 42 минут назад, Maka сказал:

    https://forum.fgx-native.com/topic/530-delphi-1033-fix-для-sdk-29-android-10/

    После этих манипуляций, приложение собранное в 10.3.3 начинает работать на Android 11

    К сожалению, статья (перевод), которую вы рекомендуете, опубликована в закрытом разделе (для пользователей с подпиской FGX Native).

     

    9 минут назад, Slym сказал:

    Забаньте Maka - рекламирует платные ресурсы.

    Человек мог просто не знать/не заметить про особенность, озвученную выше.

     

    Вот тут можно прочитать оригинал статьи (на английском): https://quality.embarcadero.com/browse/RSP-27218

     

  4. 18 часов назад, Letter сказал:

    Подскажите, как можно вывести в ListBox весь список папок и файлов из корня внутренней памяти?

    Используйте System.IOUtils и ListBox (но лучше ListView). Не забудьте кидать пользователю запрос разрешений. Ну и я точно знаю, что на некоторых девайсах вам не удастся получить список папок и файлов из корня (стандартными средствами).

  5. 14 часов назад, yarockiisergei сказал:

    Похоже это невозможно.

    Всё возможно...

    8 часов назад, Ingalime сказал:

    Не понятно как же у автора видео работает локальный сервер:

    В данном случае, у Джима код отрабатывал как ожидается, по причине того (я предполагаю), что он тестировал его на Nexus 5 (2015 чистый Android 6). Я также занимался изучением сервисов примерно в 2016, но тестировал этот код на многих девайсах. Как помню, на Android 4.4.2 всегда отрабатывал как ожидается. А вот на более новых версиях + (это жирный плюс, влияющий очень на многое) девайсах разных производителей (очень выделялись на тот момент Xiaomi) дела обстояли очень плохо, т.к. производители вводили свои ограничения для приложений (например, "авто запуск приложения/сервиса" - пользователь должен был разрешить подобное поведение в настройках приложения).

     

    В 09.10.2020 в 10:07, Ingalime сказал:

    В чем может быть проблема? Телефон Readmi 5A Андроид 8.1 MIUI 11.0.2 RAD 10.3.3

    Учитывая свой опыт, могу дать такой совет:

    Попробуйте дать все возможные разрешения на автозапуск приложения/сервиса примерно тут: "Безопасность – Разрешения – Автозапуск – Название вашего приложения" и проверить код ещё раз.

    Вот ещё небольшое описание из моего старого проекта:

    Цитата

    На других устройствах с последней версией Андроида, необходимо отключить оптимизацию для приложения. Сделать это можно в специальном меню.

    Примеры:
    Xiaomi MI Note 3 (Android 7.1.1-MIUI Global 9.5):
    - Настройки - Приложения - Разрешения - Автозапуск - Найти приложение и дать разрешение на автозапуск
    или
    - Настройки - Приложения - Все приложения - Найти приложение и войти в меню - Включить Автозапуск

    Asus_Z00LD (Android 6.0.1):
    - Откройте шторку сверху - Менеджер автозапуска - Название вашего приложения - Включить Автозапуск
    - Настройки – Приложения – Значок «Шестерёнки» - Экономия заряда батареи - Название вашего приложения – Отключить экономию заряда
    или
    - Все приложения - Мобильный диспетчер - Менеджер автозапуска - Название вашего приложения
    - Все приложения - Мобильный диспетчер - Уведомления - Название вашего приложения - Включить (если выключены)

     

     

    Из-за всех этих изменений от производителей, тема стала достаточно непростой. По этой причине считаю, что начинать нужно с нуля, т.е. с официальной справки гугла:

    Службы

    Foreground services

  6. Попробуйте так:

    var
    	Device: JUsbDeviceConnection;
    
    ...
    
    Device := FUsbManager.JavaClass.openDevice();

     

    p.s. Учитывайте тот факт, что обёртка могла сгенериться неправильно. Java2Op не всегда отрабатывает как надо, поэтому появляется необходимость проверки и правки результата.

    p.s.2. И вроде как у вас как раз такой случай... Попробуйте вот эту:

      JUsbManagerClass = interface(JObjectClass)
        ['{1048A6E9-E1B5-4DA5-A168-ED91E8DE5284}']
        {class} function _GetACTION_USB_ACCESSORY_ATTACHED: JString; cdecl;
        {class} function _GetACTION_USB_ACCESSORY_DETACHED: JString; cdecl;
        {class} function _GetACTION_USB_DEVICE_ATTACHED: JString; cdecl;
        {class} function _GetACTION_USB_DEVICE_DETACHED: JString; cdecl;
        {class} function _GetEXTRA_ACCESSORY: JString; cdecl;
        {class} function _GetEXTRA_DEVICE: JString; cdecl;
        {class} function _GetEXTRA_PERMISSION_GRANTED: JString; cdecl;
        {class} property ACTION_USB_ACCESSORY_ATTACHED: JString read _GetACTION_USB_ACCESSORY_ATTACHED;
        {class} property ACTION_USB_ACCESSORY_DETACHED: JString read _GetACTION_USB_ACCESSORY_DETACHED;
        {class} property ACTION_USB_DEVICE_ATTACHED: JString read _GetACTION_USB_DEVICE_ATTACHED;
        {class} property ACTION_USB_DEVICE_DETACHED: JString read _GetACTION_USB_DEVICE_DETACHED;
        {class} property EXTRA_ACCESSORY: JString read _GetEXTRA_ACCESSORY;
        {class} property EXTRA_DEVICE: JString read _GetEXTRA_DEVICE;
        {class} property EXTRA_PERMISSION_GRANTED: JString read _GetEXTRA_PERMISSION_GRANTED;
      end;
    
      [JavaSignature('android/hardware/usb/UsbManager')]
      JUsbManager = interface(JObject)
        ['{6F603A25-E816-4012-9B23-054B428A4A75}']
        function getAccessoryList: TJavaObjectArray<JUsbAccessory>; cdecl;//Deprecated
        function getDeviceList: JHashMap; cdecl;//Deprecated
        function hasPermission(device: JUsbDevice): Boolean; cdecl; overload;//Deprecated
        function hasPermission(accessory: JUsbAccessory): Boolean; cdecl; overload;//Deprecated
        function openAccessory(accessory: JUsbAccessory): JParcelFileDescriptor; cdecl;//Deprecated
        function openDevice(device: JUsbDevice): JUsbDeviceConnection; cdecl;//Deprecated
        procedure requestPermission(device: JUsbDevice; pi: JPendingIntent); cdecl; overload;//Deprecated
        procedure requestPermission(accessory: JUsbAccessory; pi: JPendingIntent); cdecl; overload;//Deprecated 
      end;
      TJUsbManager = class(TJavaGenericImport<JUsbManagerClass, JUsbManager>) end;

     

    p.s.3. С правилами создания обёртки можно ознакомиться тут https://delphifmandroid.blogspot.com/2014/07/java.html

    Статья старая, но правила связанные с полями/константами и методами действительны по сей день.

  7. Вы не видите Location потому что получаете заголовки уже после редиректа, т.е. заголовки уже для самого файла.

    А Location появляется во время первого запроса по адресу https://telegram.org/dl/desktop/win, там то как раз сервер и сообщает (в заголовках), что ваш запрос будет перенаправлен по адресу https://updates.tdesktop.com/tsetup/tsetup.2.4.2.exe и выдаёт вам новую порцию заголовков без Location.

    Чтобы убедиться в этом, достаточно установить HandleRedirects = False.

     

    Снимок.PNG

  8. Обратите внимание на конечные пути (Remote Path). Цитата, которую вы привели, как раз говорит вам "they should be alongside the libPublicRadio.so files under the lib folder.", т.е. для файлов библиотеки должны быть указаны те же пути, что и для libPublicRadio.so.

  9. 1 час назад, IgorK11 сказал:

    Вопрос остается открытым, что добавить в манифест что  бы при установке не ставилась "оптимизация расхода" на мое приложение?

    Посмотрите вот это: https://stackoverflow.com/a/53096282

  10. 19 минут назад, Сергей Доктор сказал:

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

    Пожалуйста.

    Способ изначально был задуман для плавного перехода на новое АПИ, но видимо забыли убрать его...

     

    Вот ваш реальный манифест из файла который вы выложили выше. (Надеюсь приложение не несёт никакого вреда?))

    Спойлер

    Screenshot_20191225-010349_APK Editor Pro.jpg

     

  11. 5 минут назад, Сергей Доктор сказал:

    завтра выложу что-нибудь с исходниками, подумаем тремя головами с ярославом что это за баг, мазафака )))))))))

    это не баг. Я же выше расписал вам в чём дело. Я декомпилировал ваш файл и там лежит другой манифест.

  12. Ааа, ну всё ясно...

    Вы выложили не тот манифест... В вашем приложении используется способ обхода о котором я говорил. Если бы сразу исходники предоставили, то всё решилось бы быстро.

    На самом деле у вас указано minSdkVersion= 14 и targetSdkVersion=14. Это способ обхода запроса разрешений, но гугл обещал его выпилить... видимо забыли...))

    Возвращаясь к вашему вопросу, студия 10.3.* просто меняет значения на новые (или даже пересоздаёт файл манифеста, выяснять не буду) и поэтому разрешения не выдаются. Вот и вся загадка...

     

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

  13. 22 минуты назад, Сергей Доктор сказал:

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

    Ок. сообщение с файлом я скрыл, т.к. не вызывает доверия. Было бы не плохо, получить от вас хоть какие-то исходники. Если такое происходит и с хеллоуворлд, то хотя бы эти исходники. Тут дело в том, что я компилю на 10.3.3 хеллоу ворлд с такими же разрешениями и у меня они не выдаются...

    11 минут назад, Сергей Доктор сказал:

    я думаю это дыра, надеюсь пофиксят, знать бы куда сообщить

    О багах, дырах и т.п. сообщать сюда https://quality.embarcadero.com/

  14. 2 минуты назад, Сергей Доктор сказал:

    вот это мне и самому интересно. как вы и писали с 6 версии должно это прекратиться, но почему-то не прекратилось. 

    Скинуть исходники в личку есть возможность?

     

    3 минуты назад, Сергей Доктор сказал:

    вот это мне и самому интересно. как вы и писали с 6 версии должно это прекратиться, но почему-то не прекратилось. 

    Я знаю только один способ, но не исключено, что есть ещё...

  15. Отлично, теперь давайте по порядку.

    1 час назад, Сергей Доктор сказал:

    в USES Permission выставил разрешения, манифест генерируется автоматом. снёс 10.3 и поставил 10.2 все в порядке, разрешения получает при установке apk.

    и

    1 час назад, Сергей Доктор сказал:

    версии андроида пробовал на 6   7   9   5.1.1, на реальных телефонах, не в эмуляторе.

    скорее всего это не соответствует действительности.

     

    Объясню почему, кратко. А подробнее можно почитать по ссылке ниже.

    С Android 6 (API 23) были усилены меры безопасности. Разрешения (Uses Permissions) были поделены на две категории "Обычные" и "Опасные". Отличие заключается в том, что:

    • на версиях Андроид до 6 достаточно прописать разрешения в манифесте
    • на версиях Андроид 6 и выше, опасные разрешения необходимо прописать в манифесте и запрашивать в режиме реального времени, т.е. прямо во время выполнения приложения.

    Тут важно добавить, что есть способ обойти эти меры безопасности, но не факт что он будет работать на новых версиях Андроида, поэтому озвучивать его не буду.

    В вашем манифесте море опасных разрешений и соответственно они не могли быть получены через манифест на версиях Андроид >=6.

     

    1 час назад, Сергей Доктор сказал:

    <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="28" />

    Вы явно указываете, что ваше приложение поддерживает Андроид 4.0 и разрабатывалось для Андроид 9. А значит вы уже обязаны запрашивать разрешения в режиме реального времени.

    Примечание. Студия 10.2.* и 10.3.* официально не поддерживают Андроид 4.0-4.4.4, но приложения запускаются. Однако при использовании студии версии 10.3.3 и некоторых компонентов вы увидите кучу ошибок или AV на версиях Андроид 4.0-4.4.4.

     

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

    [Статья][Android] Серия статей на тему Uses Permissions

     

  16. Ознакомьтесь с FireDAC.Stan.Option.TFDFetchOptions.RecordCountMode.

    И начните уже пользоваться поиском на форуме... Не один раз обсуждалась эта тема Показаны результаты для 'RecordCount'

     

    p.s. Тему перенёс в подходящий раздел.

  17. 14 часов назад, Alexander Samosyuk сказал:

    Доброго времени всем!

    Есть вопрос, может кто сталкивался с покупкой через свое приложение? Есть ли у кого код или какая-нибудь информация об этом?

    Хочу реализовать покупку подписки для приложения

    Вы пробовали пользоваться поиском на форуме? (Думаю нет...) Работа с TInAppPurchase

     

    p.s. Тему перенёс в соответствующий раздел "TInAppPurchase"

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