-
Постов
842 -
Зарегистрирован
-
Победитель дней
123
Ответы сообщества
-
Пост Andrey Efimov - сообщение в Запретить помещать приложение во всплывающем окне(Android) был отмечен как ответ
Посмотрите эту страницу документации: Configuring your app for multi-window Mode
-
Пост 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;
-
Пост 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
Статья старая, но правила связанные с полями/константами и методами действительны по сей день.
-
Пост Andrey Efimov - сообщение в Проблема с манифестом был отмечен как ответ
Ааа, ну всё ясно...
Вы выложили не тот манифест... В вашем приложении используется способ обхода о котором я говорил. Если бы сразу исходники предоставили, то всё решилось бы быстро.
На самом деле у вас указано minSdkVersion= 14 и targetSdkVersion=14. Это способ обхода запроса разрешений, но гугл обещал его выпилить... видимо забыли...))
Возвращаясь к вашему вопросу, студия 10.3.* просто меняет значения на новые (или даже пересоздаёт файл манифеста, выяснять не буду) и поэтому разрешения не выдаются. Вот и вся загадка...
Да, кстати, приложение ваше не запускается. Падает с чёрным экраном.
-
Пост Andrey Efimov - сообщение в Почему в RecordCount не все строки таблицы? был отмечен как ответ
Ознакомьтесь с FireDAC.Stan.Option.TFDFetchOptions.RecordCountMode.
И начните уже пользоваться поиском на форуме... Не один раз обсуждалась эта тема Показаны результаты для 'RecordCount'
p.s. Тему перенёс в подходящий раздел.
-
Пост 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. А вообще, это вы должны были ещё в первом посте указать версию среды...
-
Пост Andrey Efimov - сообщение в Запрос "опасных" разрешений в рантайме был отмечен как ответ
Добавляем метод onRequestPermissionsResult в приложение
-
Пост Andrey Efimov - сообщение в сохранение файла и доступ к нему с компа был отмечен как ответ
Раньше сталкивался с подобной проблемой, сейчас такого поведения не встречаю.
1) Проблема была связана с работой от usb-кабеля (если не изменяет память, то было на сони экспириа). Если во время сохранения файла, устройство подключено к компу, то файл не будет виден на компе. Вариант обхода: отключить устройство от компа, поработать в приложении (т.е. сохранить файл), подключить устройство к компу.\
2) Ещё такое поведение было связано с возможным кэшированием в Андроиде, но это не проверенная мной теория.
3) Ну и не исключением становятся руки программиста. Бывает такое, что файл хотят сохранять в папку приложения на внешней карте. В итоге путают путь при сохранении и сохраняют файл во внутреннюю память, а потом удивляются, почему это файл не видно. При этом, был случай, когда через файловый менеджер человек заходил во внутреннюю память (видел свой файл) и думал, что зашёл во внешнюю. А с компа заходил во внешнюю и естественно не видел файл, т.к. он был во внутренней памяти. В общем чел. фактор тоже играет свою роль
up. По поводу 2 пункта, попробуйте провернуть вот это: Не видны программно созданные файлы
-
Пост Andrey Efimov - сообщение в Как сделать приложение системным? был отмечен как ответ
Попробуйте извлечь файл .so из вашего apk и добавить его в папку /system/lib/. Ну и закинуть apk файл в папку /system/priv-app/.
А вообще вам не сюда, вам на 4pda или xda-developers (англ.)
На этом форуме разработчики софта, а не спецы по модификации прошивок.
-
Пост Andrey Efimov - сообщение в Нужны на мобильной платформе строки, которые работают по стандарту языка pascal. был отмечен как ответ
Отлично работает. Проверил на Андроиде в Berlin 10.1.2 и Tokyo 10.2.1, скрины ниже. К слову, в исходниках студии есть файлы в которых используется эта директива и всё прекрасно работает.
С библиотекой pascalc не сталкивался, поэтому ничего конкретного не подскажу.
-
Пост Andrey Efimov - сообщение в Отладка на устройстве был отмечен как ответ
Ага, где-то косяк, вероятнее всего в драйверах/ПО HTC Sync (разбираться где именно косяк, удалить всё и заново устанавливать), на втором месте СДК, а точнее с пакетом "platform-tools" (тут как вариант, можно переустановить/обновить), версия API значения не имеет .
АП.
p.s. В теме про прошивку, у народа тоже такие проблемы возникают, как я и говорил "HTC в своём репертуаре..."
-
Пост Andrey Efimov - сообщение в Version Info, label (Android) был отмечен как ответ
Прямая ссылка в блог: Автоматическая смена названия приложения в зависимости от языка системы
Ссылка на форуме(Раздел "Статьи"): [Статья][Android] Автоматическая смена названия приложения в зависимости от языка системы
и ещё есть обычные темы по этому вопросу, но прикладывать не буду.
p.s. Народ совсем обленился, сложно поиском воспользоваться...
-
Пост Andrey Efimov - сообщение в Остановить таймер, когда приложение сворачивается был отмечен как ответ
Вот сделал таблицу с событиями. Добавил в статью Очередь событий Delphi приложения на Android
И получилось, что отслеживать сворачивание можно по:
OnSaveState
aeWillBecomeInactive
EnteredBackground
Разворачивание:
WillBecomeForeground
-
Пост Andrey Efimov - сообщение в В определенное время отправлять SMS - как лучше реализовать? был отмечен как ответ
[Статья][Android] AlarmManager - Автозапуск приложения в назначенное время
-
Пост Andrey Efimov - сообщение в TEdit.Height под Андроидом был отмечен как ответ
Повторяю, пользуйтесь поиском и вообще смотрите соседние темы в разделе, перед тем как задать вопрос. Все начальные вопросы уже обсуждались.
Поиск -> "не меняется высота" -> результат - ничего сложного...
[TEdit] [Android] Можно ли изменить высоту TEdit?
-
Пост 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;
Повторюсь, это грубый, но рабочий пример. Рекомендуется доработать его перед использованием в рабочем проекте!
-
Пост Andrey Efimov - сообщение в Как подключать java-обёртки? был отмечен как ответ
android-** (** - версия АПИ, чем выше цифра, тем больше нового поддерживает обёртка. Обратная совместимость поддерживается.) Выбираете файл по АПИ под которое пишите.
По вашему примеру:
JList уже определён в файле "Androidapi.JNI.JavaTypes.pas", т.е. нет необходимости подключать стороннюю обёртку. Указываете в uses Androidapi.JNI.JavaTypes и работаете с JList.
p.s. Обёртки, которые вы скачали, необходимо проверять, т.к. многие из них сгенерены с ошибками.
-
Пост 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 может быть другим).
-
Пост Andrey Efimov - сообщение в opendialog для папок был отмечен как ответ
Так не устраивает?
procedure TFormMain.sbSelectFolderClick(Sender: TObject); var PathFolder: string; begin if SelectDirectory('Выбор папки...', '', PathFolder) then ePathFolder.Text := PathFolder; end; SelectDirectory
-
Пост Andrey Efimov - сообщение в Не удаляет компонент был отмечен как ответ
Как правильно удалять контролы в RunTime?
-
Пост Andrey Efimov - сообщение в Узнать сколько свободного места на диске был отмечен как ответ
Ответ есть в теме Узнать количество свободного места
p.s. Тему перенёс в подходящий раздел
-
Пост Andrey Efimov - сообщение в Узнать количество свободного места был отмечен как ответ
Попробуйте вот так Запрос доступного пространства
p.s. Лучше поздно, чем никогда.
-
Пост Andrey Efimov - сообщение в Как вызвать что-нибудь из Android API? Объясните пошагово был отмечен как ответ
Кто ищет, тот найдёт...
Вот вы статью нашли, полазили бы в блоге, например в разделе "Список всех сообщений" и ...
Как создавать обёртки для JAVA-кода Как подключить и использовать свой JAVA-класс Как добавить jar библиотеку в проект Дальше, воспользовались бы поиском на этом форуме и ...
Поиск по запросу "обёртки":
Утилита генерации pas файлов для AndroidAPI из jar файлов + ещё множество полезных тем Ну и наконец: Полностью транслированное Android API 7-23 уровня
И чуть не забыл, есть же справка официальная Help for RAD Studio Berlin
p.s. Всё уже давно разжёвано, вопросы задают по каким-то конкретным моментам.
-
Пост Andrey Efimov - сообщение в [TRadioButton] Как разместить текст TRadioButton слева от круга? был отмечен как ответ
Если необходимо разместить текст слева от точки/кружочка, то придётся отредактировать стиль компонента. Кидаете компонент на форму, правый клик по нему и далее Edit Custom Style или Edit Default Style, далее уже редактируете стиль.