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

Andrey Efimov

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

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

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

    123

Ответы сообщества

  1. Пост Andrey Efimov - сообщение в Запретить помещать приложение во всплывающем окне(Android) был отмечен как ответ   
    Посмотрите эту страницу документации: Configuring your app for multi-window Mode
  2. Пост Andrey Efimov - сообщение в Служба - двухсторонняя связь был отмечен как ответ   
    Например вот так.
    в программе:
    var LIntent: JIntent; begin LIntent := TJIntent.Create; LIntent.setClassName(TAndroidHelper.Context.getPackageName(), StringToJString('com.embarcadero.services.nameservice')); LIntent.putExtra(StringToJString('NameForValue'), StringToJString('Value')); TAndroidHelper.Activity.StartService(LIntent); в сервисе:
    function TDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; var Value: string; begin Value := JStringToString(Intent.getStringExtra(StringToJString('NameForValue'))); // дальше что-то делаем end;  
  3. Пост Andrey Efimov - сообщение в Работа с android.hardware.usb.UsbManager был отмечен как ответ   
    Попробуйте так:
    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
    Статья старая, но правила связанные с полями/константами и методами действительны по сей день.
  4. Пост Andrey Efimov - сообщение в Проблема с манифестом был отмечен как ответ   
    Ааа, ну всё ясно...
    Вы выложили не тот манифест... В вашем приложении используется способ обхода о котором я говорил. Если бы сразу исходники предоставили, то всё решилось бы быстро.
    На самом деле у вас указано minSdkVersion= 14 и targetSdkVersion=14. Это способ обхода запроса разрешений, но гугл обещал его выпилить... видимо забыли...))
    Возвращаясь к вашему вопросу, студия 10.3.* просто меняет значения на новые (или даже пересоздаёт файл манифеста, выяснять не буду) и поэтому разрешения не выдаются. Вот и вся загадка...
     
    Да, кстати, приложение ваше не запускается. Падает с чёрным экраном.
  5. Пост Andrey Efimov - сообщение в Почему в RecordCount не все строки таблицы? был отмечен как ответ   
    Ознакомьтесь с FireDAC.Stan.Option.TFDFetchOptions.RecordCountMode.
    И начните уже пользоваться поиском на форуме... Не один раз обсуждалась эта тема Показаны результаты для 'RecordCount'
     
    p.s. Тему перенёс в подходящий раздел.
  6. Пост Andrey Efimov - сообщение в Узнать дату Android приложения был отмечен как ответ   
    Вот так попробуйте:
    uses Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.JavaTypes, Androidapi.Helpers, Androidapi.JNI.App; procedure TForm1.Button1Click(Sender: TObject); var PackageManager: JPackageManager; PackageName: JString; LastUpdateTime: Int64; begin PackageManager := TAndroidHelper.Activity.getPackageManager; PackageName := TAndroidHelper.Context.getPackageName; LastUpdateTime := PackageManager.getPackageInfo(PackageName, 0).lastUpdateTime; // firstInstallTime end;  
    p.s. А вообще, это вы должны были ещё в первом посте указать версию среды...
  7. Пост Andrey Efimov - сообщение в Запрос "опасных" разрешений в рантайме был отмечен как ответ   
    Добавляем метод onRequestPermissionsResult в приложение
  8. Пост Andrey Efimov - сообщение в сохранение файла и доступ к нему с компа был отмечен как ответ   
    Раньше сталкивался с подобной проблемой, сейчас такого поведения не встречаю.
    1) Проблема была связана с работой от usb-кабеля (если не изменяет память, то было на сони экспириа). Если во время сохранения файла, устройство подключено к компу, то файл не будет виден на компе. Вариант обхода: отключить устройство от компа, поработать в приложении (т.е. сохранить файл), подключить устройство к компу.\
    2) Ещё такое поведение было связано с возможным кэшированием в Андроиде, но это не проверенная мной теория.
    3) Ну и не исключением становятся руки программиста. Бывает такое, что файл хотят сохранять в папку приложения на внешней карте. В итоге путают путь при сохранении и сохраняют файл во внутреннюю память, а потом удивляются, почему это файл не видно. При этом, был случай, когда через файловый менеджер человек заходил во внутреннюю память (видел свой файл) и думал, что зашёл во внешнюю. А с компа заходил во внешнюю и естественно не видел файл, т.к. он был во внутренней памяти. В общем чел. фактор тоже играет свою роль
     
    up. По поводу 2 пункта, попробуйте провернуть вот это: Не видны программно созданные файлы
  9. Пост Andrey Efimov - сообщение в Как сделать приложение системным? был отмечен как ответ   
    Попробуйте извлечь файл .so из вашего apk и добавить его в папку /system/lib/. Ну и закинуть apk файл в папку /system/priv-app/.
     
    А вообще вам не сюда, вам на 4pda или xda-developers (англ.)
    На этом форуме разработчики софта, а не спецы по модификации прошивок.
  10. Пост Andrey Efimov - сообщение в Нужны на мобильной платформе строки, которые работают по стандарту языка pascal. был отмечен как ответ   
    Отлично работает. Проверил на Андроиде в Berlin 10.1.2 и Tokyo 10.2.1, скрины ниже. К слову, в исходниках студии есть файлы в которых используется эта директива и всё прекрасно работает.
    С библиотекой pascalc не сталкивался, поэтому ничего конкретного не подскажу.
  11. Пост Andrey Efimov - сообщение в Отладка на устройстве был отмечен как ответ   
    Ага, где-то косяк, вероятнее всего в драйверах/ПО HTC Sync (разбираться где именно косяк, удалить всё и заново устанавливать), на втором месте СДК, а точнее с пакетом "platform-tools" (тут как вариант, можно переустановить/обновить), версия API значения не имеет .
     
    АП.
    p.s. В теме про прошивку, у народа тоже такие проблемы возникают, как я и говорил "HTC в своём репертуаре..."
  12. Пост Andrey Efimov - сообщение в Version Info, label (Android) был отмечен как ответ   
    Прямая ссылка в блог: Автоматическая смена названия приложения в зависимости от языка системы
    Ссылка на форуме(Раздел "Статьи"): [Статья][Android] Автоматическая смена названия приложения в зависимости от языка системы
    и ещё есть обычные темы по этому вопросу, но прикладывать не буду.
     
    p.s. Народ совсем обленился, сложно поиском воспользоваться...
  13. Пост Andrey Efimov - сообщение в Остановить таймер, когда приложение сворачивается был отмечен как ответ   
    Вот сделал таблицу с событиями. Добавил в статью Очередь событий Delphi приложения на Android
    И получилось, что отслеживать сворачивание можно по:
    OnSaveState
    aeWillBecomeInactive
    EnteredBackground
    Разворачивание:
    WillBecomeForeground

  14. Пост Andrey Efimov - сообщение в Настройки IDE Delphi был отмечен как ответ   
  15. Пост Andrey Efimov - сообщение в В определенное время отправлять SMS - как лучше реализовать? был отмечен как ответ   
    [Статья][Android] AlarmManager - Автозапуск приложения в назначенное время
  16. Пост Andrey Efimov - сообщение в TEdit.Height под Андроидом был отмечен как ответ   
    Повторяю, пользуйтесь поиском и вообще смотрите соседние темы в разделе, перед тем как задать вопрос. Все начальные вопросы уже обсуждались.
    Поиск -> "не меняется высота" -> результат - ничего сложного...
    [TEdit] [Android] Можно ли изменить высоту TEdit?
     
  17. Пост Andrey Efimov - сообщение в Занимаемая приложением память был отмечен как ответ   
    Если грубо, то примерно вот так:
    uses Androidapi.JNI.App, Androidapi.Helpers, Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.JavaTypes, Androidapi.JNI.Os, Androidapi.JNIBridge; function IntArrayToJArray(const OrigArray: array of Integer): TJavaArray<Integer>; var I: Integer; begin Result := TJavaArray<Integer>.Create(Length(OrigArray)); for I := Low(OrigArray) to High(OrigArray) do Result.Items[I] := OrigArray[I]; end; procedure TForm3.Button1Click(Sender: TObject); var ActivityManager: JActivityManager; List: JList; Iterator: JIterator; Process: JActivityManager_RunningAppProcessInfo; ArrayMemoryInfo: TJavaObjectArray<JDebug_MemoryInfo>; begin ActivityManager := TJActivityManager.Wrap(TAndroidHelper.Context.getSystemService(TJContext.JavaClass.ACTIVITY_SERVICE)); List := ActivityManager.getRunningAppProcesses; Iterator := List.iterator; while Iterator.hasNext do begin Process := TJActivityManager_RunningAppProcessInfo.Wrap(Iterator.next); ArrayMemoryInfo := ActivityManager.getProcessMemoryInfo(IntArrayToJArray([Process.pid])); Memo1.Lines.Add(JStringToString(Process.processName) + ' ' + ArrayMemoryInfo[0].getTotalSharedDirty.ToString); end; end;  
    Повторюсь, это грубый, но рабочий пример. Рекомендуется доработать его перед использованием в рабочем проекте!
  18. Пост Andrey Efimov - сообщение в Как подключать java-обёртки? был отмечен как ответ   
    android-** (** - версия АПИ, чем выше цифра, тем больше нового поддерживает обёртка. Обратная совместимость поддерживается.) Выбираете файл по АПИ под которое пишите.

    По вашему примеру:
    JList уже определён в файле "Androidapi.JNI.JavaTypes.pas", т.е. нет необходимости подключать стороннюю обёртку. Указываете в uses Androidapi.JNI.JavaTypes и работаете с JList.
     
    p.s. Обёртки, которые вы скачали, необходимо проверять, т.к. многие из них сгенерены с ошибками.
     
     
  19. Пост Andrey Efimov - сообщение в Не работает с вибрацией был отмечен как ответ   
    Ну, если не хотите попробовать мою демку и посмотреть класс, то давайте изменю ваш код:
    procedure Vibr; //Процедура вибрации var Vibrator: JVibrator; begin Vibrator := TJVibrator.Wrap(TAndroidHelper.Context.getSystemService(TJContext.JavaClass.VIBRATOR_SERVICE)); if Vibrator.hasVibrator() then Vibrator.vibrate(2000); end; доступ к сервису вибрации нужно получать у Context'a.
     
    Если всё равно падает, то смотрите логи, через monitor.bat (находится примерно тут: C:\Android\sdk\tools, у вас путь до sdk может быть другим).
  20. Пост Andrey Efimov - сообщение в opendialog для папок был отмечен как ответ   
    Так не устраивает?
    procedure TFormMain.sbSelectFolderClick(Sender: TObject); var PathFolder: string; begin if SelectDirectory('Выбор папки...', '', PathFolder) then ePathFolder.Text := PathFolder; end; SelectDirectory
  21. Пост Andrey Efimov - сообщение в Не удаляет компонент был отмечен как ответ   
    Как правильно удалять контролы в RunTime?
  22. Пост Andrey Efimov - сообщение в Узнать сколько свободного места на диске был отмечен как ответ   
    Ответ есть в теме Узнать количество свободного места
     
    p.s. Тему перенёс в подходящий раздел
  23. Пост Andrey Efimov - сообщение в Узнать количество свободного места был отмечен как ответ   
    Попробуйте вот так Запрос доступного пространства
     
    p.s. Лучше поздно, чем никогда.
  24. Пост Andrey Efimov - сообщение в Как вызвать что-нибудь из Android API? Объясните пошагово был отмечен как ответ   
    Кто ищет, тот найдёт...
    Вот вы статью нашли, полазили бы в блоге, например в разделе "Список всех сообщений" и ...
    Как создавать обёртки для JAVA-кода Как подключить и использовать свой JAVA-класс Как добавить jar библиотеку в проект Дальше, воспользовались бы поиском на этом форуме и ...
    Поиск по запросу "обёртки":
    Утилита генерации pas файлов для AndroidAPI из jar файлов + ещё множество полезных тем Ну и наконец: Полностью транслированное Android API 7-23 уровня
    И чуть не забыл, есть же справка официальная Help for RAD Studio Berlin
     
    p.s. Всё уже давно разжёвано, вопросы задают по каким-то конкретным моментам.
  25. Пост Andrey Efimov - сообщение в [TRadioButton] Как разместить текст TRadioButton слева от круга? был отмечен как ответ   
    Если необходимо разместить текст слева от точки/кружочка, то придётся отредактировать стиль компонента. Кидаете компонент на форму, правый клик по нему и далее Edit Custom Style или Edit Default Style, далее уже редактируете стиль.
×
×
  • Создать...