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

sinuke

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

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

  • Посещение

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

    35

Активность репутации

  1. Like
    sinuke получил реакцию от Hevard в [Android] Прозрачный StatusBar в RAD 10.3 Rio   
    Привет
    Вчера была выпущена финальная версия RAD Studio 10.3 Rio, в которой много нововведений для Андройд. Но вот про статусбар снова "забыли". Хотя не совсем, добавили файлик styles-v21.xml, который превносит новую материальную тему на устройствах под управлением Android 5.0 и выше вместо устаревшей Holo.
    Но все равно свойство формы SystemStatusBar так и не реализовали. Поэтому при запуске статус бар будет окрашен в унылый серый цвет (см. скриншот).

    Для того, чтобы сделать статусбар прозрачным и поместить под него содержимое формы, то достаточно сделать несколько несложных шагов:
    1. Убираем из деплоймента (Project -> Deployment) файл styles-v21.xml (можно просто снять галочку рядом с именем файла)

    2. Добавить в деплоймент проекта новый файл styles-v21.xml (styles-v21.zip) и прописать ему путь res\values-v21\

    3. В результате получится следующий вид

     
    P.S. В новом файле по сравнению со стандартным добавилась строчка <item name="android:windowTranslucentStatus">true</item>, которая и отвечает за прозрачный статусбар
    P.P.S. Чтобы определять размер статус бара, все также можно воспользоваться решеним ZuBy - http://blog.rzaripov.kz/2016/12/android-ios.html
    P.P.P.S. Тестовый проектик - StatusBar.zip
  2. Like
    sinuke получил реакцию от Ingalime в FPushService.DeviceTokenValue = nil Что делать?   
    Получилось получить DeviceToken? А то у меня такая же проблема...
     
    Upd: В чате выяснилось, что код создания подключения и получения токена нужно выполнять в отдельном потоке. Например так:
    TTask.Run( procedure () begin FPushService := nil; FPushServiceConnection := nil; {$IF defined(ANDROID)} FPushService := TPushServiceManager.Instance.GetServiceByName(TPushService.TServiceNames.GCM); FPushService.AppProps[TPushService.TAppPropNames.GCMAppID] := ANDROID_SEND_ID; {$ENDIF} if Assigned(FPushService) then begin FPushServiceConnection := TPushServiceConnection.Create(FPushService); FPushServiceConnection.OnChange := OnServiceConnectionChange; FPushServiceConnection.OnReceiveNotification := OnReceiveNotificationEvent; FPushServiceConnection.Active := True; FDeviceID := FPushService.DeviceIDValue[TPushService.TDeviceIDNames.DeviceID]; FDeviceToken := FPushService.DeviceTokenValue[TPushService.TDeviceTokenNames.DeviceToken]; TThread.Synchronize(TThread.CurrentThread, procedure () begin Log('DeviceID: ' + FDeviceID); Log('DeviceToken: ' + FDeviceToken); end); end; end);  
    Так все работает!
  3. Like
    sinuke получил реакцию от panmilkos в Возможно ли сделать такой интерфейс с ЛистВью?   
    Ну вот набросал примерчик. Он упрощенный, но смысл такой же примерно (код листвью со скриншота выше выложить не могу просто из-за того, что там идут зависимости от модели данных).
    Лично я все рисую кодом - так полный контроль того, что выводится на экран. И собственно так можно выводить практически что угодно. И не нужны никакие монструозные ТМС компоненты

    ListView_Schedule_Sample.zip
  4. Like
    sinuke получил реакцию от FAN в Возможно ли сделать такой интерфейс с ЛистВью?   
    Ну вот набросал примерчик. Он упрощенный, но смысл такой же примерно (код листвью со скриншота выше выложить не могу просто из-за того, что там идут зависимости от модели данных).
    Лично я все рисую кодом - так полный контроль того, что выводится на экран. И собственно так можно выводить практически что угодно. И не нужны никакие монструозные ТМС компоненты

    ListView_Schedule_Sample.zip
  5. Like
    sinuke получил реакцию от Wolfone в [Android] Прозрачный StatusBar в RAD 10.3 Rio   
    Привет
    Вчера была выпущена финальная версия RAD Studio 10.3 Rio, в которой много нововведений для Андройд. Но вот про статусбар снова "забыли". Хотя не совсем, добавили файлик styles-v21.xml, который превносит новую материальную тему на устройствах под управлением Android 5.0 и выше вместо устаревшей Holo.
    Но все равно свойство формы SystemStatusBar так и не реализовали. Поэтому при запуске статус бар будет окрашен в унылый серый цвет (см. скриншот).

    Для того, чтобы сделать статусбар прозрачным и поместить под него содержимое формы, то достаточно сделать несколько несложных шагов:
    1. Убираем из деплоймента (Project -> Deployment) файл styles-v21.xml (можно просто снять галочку рядом с именем файла)

    2. Добавить в деплоймент проекта новый файл styles-v21.xml (styles-v21.zip) и прописать ему путь res\values-v21\

    3. В результате получится следующий вид

     
    P.S. В новом файле по сравнению со стандартным добавилась строчка <item name="android:windowTranslucentStatus">true</item>, которая и отвечает за прозрачный статусбар
    P.P.S. Чтобы определять размер статус бара, все также можно воспользоваться решеним ZuBy - http://blog.rzaripov.kz/2016/12/android-ios.html
    P.P.P.S. Тестовый проектик - StatusBar.zip
  6. Like
    sinuke отреагировална krapotkin в Свой APK updater. Использование Fileprovider   
    У меня в работе два приложения, и оба они не предназначены для Play market, так как имеют ограниченный круг использования, по сути, чисто внутрикорпоративные. Так что нежелательно и выкладывание их и на альтернативные магазины приложений. 
    Автоматически возникает вопрос обновления. Если в  первый раз мы можем установить приложение сами при помощи админов, то обновлять их не так просто. А контингент пользователей не справится с "скачайте APK по ссылке, найдите, куда его скачал браузер, и запустите вручную именно последний скачанный, а не какой попало"...
    Простейший способ - дать приложению скачать свежую копию с сайта и натравить на полученный файл системный инсталлер.
    Вот только свежие Andoird делать это напрямик запрещают. Нужен filepropvider. Целый день шуровал по мануалам и YT,
    Вот то что получилось  в результате.
    Если у вас 10.3.3 как у меня, уже можно не вносить <provider>...</provider> в манифест и свой файл file_paths.xml (или как вам его советуют назвать в интернетах) в деплой.
    Теперь все это делается хоть несколько странно и однобоко, но автоматически, путем установки галочки Secure File Sharing

    после этого в манифесте автоматически пропишется один из вариантов размещения файлов, которые вы можете найти в интернете. Используется алиас external-path
    файл, показанный на рисунке, создается автоматически самой делфи.

    теперь остается отгадать, какой путь реально подставится вместо "."
    Как показала практика, все пути выглядят не так, как кажется, если исходить из простого здравого смысла. Целый день использования GetHomeDir и других полезных методов TPath завел меня совсем в тупик.
    Оказалось все проще (?)
    st:TMemoryStream; OutputDir: JFile; ApkFile: JFile; ApkUri: Jnet_Uri; path, filename: string; ... OutputDir := TAndroidHelper.Context.getExternalCacheDir(); path := JStringToString(OutputDir.getAbsolutePath); filename := path+'/ASDroid2.apk'; ApkFile := TJfile.JavaClass.init( StringToJstring(filename)); FApkUri := TAndroidHelper.JFileToJURI(ApkFile); st.Position := 0; st.SaveToFile(filename); обратите внимание, в provider_paths мы задаем external-paths, а в коде ищем ExternalCacheDir.!!!  (For.Unbelievably.Creative.Knowers!)
    Потом все просто. FApkUri передаем в интент и запускаем 
    итоговый код примерно таков. (скачивание в потоке с использованием небольшого собственного API, но там ничего важного, можно не обращать внимания)
    procedure TasdSettingsFrame.bDownloadClick(Sender: TObject); begin {$IFDEF ANDROID} bDownload.Enabled := False; DownloadAndRun(); {$ENDIF} end; {$IFDEF ANDROID} procedure TasdSettingsFrame.DownloadAndRun(); begin ttask.Run(procedure var aapi:TasdAPI; st:TMemoryStream; OutputDir: JFile; ApkFile: JFile; ApkUri: Jnet_Uri; path, filename: string; begin st := TMemoryStream.Create; aapi := TasdAPI.Clone(_API); try aapi.OnReceiveData := OnReceiveData; aapi.getApk(st); if aapi.Err.Code=0 then begin OutputDir := TAndroidHelper.Context.getExternalCacheDir(); path := JStringToString(OutputDir.getAbsolutePath); filename := path+'/ASDroid2.apk'; ApkFile := TJfile.JavaClass.init( StringToJstring(filename)); FApkUri := TAndroidHelper.JFileToJURI(ApkFile); st.Position := 0; st.SaveToFile(filename); TThread.Synchronize(nil,procedure begin bDownload.Enabled := true; StartActivity(FApkUri); end); end; finally st.Free; aapi.Free; end; end); end; procedure StartActivity(ApkUri: Jnet_Uri); var Intent: JIntent; begin Intent := TJIntent.Create(); Intent.setAction(TJIntent.JavaClass.ACTION_VIEW); Intent.addFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK or TJIntent.JavaClass.FLAG_ACTIVITY_CLEAR_TOP or TJIntent.JavaClass.FLAG_GRANT_WRITE_URI_PERMISSION or TJIntent.JavaClass.FLAG_GRANT_READ_URI_PERMISSION); Intent.setDataAndType(apkuri, StringToJString('application/vnd.android.package-archive')); TAndroidHelper.Activity.startActivity(Intent); end; procedure TasdSettingsFrame.OnReceiveData(const Sender: TObject; AContentLength: Int64; AReadCount: Int64; var Abort: Boolean); begin tthread.Synchronize(nil, procedure begin pb1.Max := AContentLength; pb1.Value := AReadCount; end); end; {$ENDIF} Вопросы остались конечно, почему так странно с каталогами, но выяснять пока нет желания. Работает - не трожь.
    Всем удачи.
    UPD.
    Для того, чтобы системный инсталлер запускался, нужно не забыть отметить еще одну галочку

     
     
     
     
     
  7. Like
    sinuke отреагировална CyberStorm в Android 64   
    Спасибо! Благодаря вашим наводкам наткнулся на инструкцию как собрать бандлы: http://docwiki.embarcadero.com/RADStudio/Rio/en/Submitting_Your_Android_App_to_Google_Play
    Пришлось грузить гуглу зашифрованный ключ, пришлось помучаться (https://stackoverflow.com/questions/44103024/how-to-enable-google-play-app-signing)
    И теперь собираются полноценные рабочие приложения!
  8. Like
    sinuke получил реакцию от CyberStorm в Android 64   
    На скрине внизу написаны поддерживаемые ABI: armeabi-v7a - это и есть 32-бит. а в ПлейМаркете приложения могут быть загружены как бандлы, содержащие как 32, так и 64 битные версии. При установке приложения ПлейМаркет сам формирует нужный пакет для телефона в зависимости от возможностей телефона.
  9. Like
    sinuke получил реакцию от Ingalime в Android 64   
    На скрине внизу написаны поддерживаемые ABI: armeabi-v7a - это и есть 32-бит. а в ПлейМаркете приложения могут быть загружены как бандлы, содержащие как 32, так и 64 битные версии. При установке приложения ПлейМаркет сам формирует нужный пакет для телефона в зависимости от возможностей телефона.
  10. Like
    sinuke получил реакцию от brunnengi в -=ЗАКАЗ=- [Delphi][Android] Запись Аудио c исп. BASS   
    Здравствуйте. Есть готовый пример по записи с микрофона в OGG с ипользованием BASS

     
  11. Thanks
    sinuke получил реакцию от Сергей Сергеев в RAD Studio 10.3.3 (с поддержкой Андроид 64-бит, macOS Catalina 64-bit, iOS 13)   
    отключите (уберите галочку) с генерируемого splash_image_def.xml для adnroid64 и добавьте тот, который идет для android32
  12. Like
    sinuke получил реакцию от Сергей Сергеев в RAD Studio 10.3.3 (с поддержкой Андроид 64-бит, macOS Catalina 64-bit, iOS 13)   
    проверьте деплоймент. у меня студия на 64 битного андройда как бы файлы перенесла. но некоторые пути все же сбросила к стандартным (например иконки). так что может быть также поступила и со сплешем
  13. Thanks
    sinuke получил реакцию от Татьяна в Как можно обновиться в Google Play после 1 августа   
    Получил продление для приложений

  14. Like
    sinuke получил реакцию от Tumaso в Как можно обновиться в Google Play после 1 августа   
    Получил продление для приложений

  15. Like
    sinuke получил реакцию от Ingalime в Как можно обновиться в Google Play после 1 августа   
    Получил продление для приложений

  16. Like
    sinuke отреагировална Олег Киреев в Приложение для расчёта сцепления автомобиля и его привода v.1.1   
    Это приложение для OS Windows выполняет:
    1.Расчёт сцепления:
    -расчёт и подбор геометрических параметров нажимного и 
    ведомого дисков, муфты выключения;
    -проверка параметров по теплонагруженности пар трения;
    -расчёт всех наиболее нагруженных деталей сцепления 
    (пружины, пластины, подшипник).
    2.Расчёт пневмогидравлического привода сцелпения:
    -подбор и проверка управляющего и исполнительного 
    органов;
    -объём жидкости.
    3.Возможность вноса и редактирования исходных данных и 
    результатов в БД.
    4.Распечатку всего расчёта с исходными данными, 
    формулами, графиками, используемой литературой и 
    результатами в MS Word.
    5.Просмотр и изучение нажимного, ведомого дисков
    и муфты выключения в 3D.
    Изначально для работы в приложении необходимы 
    некоторые
    знания конструкции сцепления и теории расчёта.
     Автор: Олег Киреев-ведущий инженер-конструктор,
                  kireevoleg1966@gmail.com, +375 29 676 13 84
                  БЕЛАРУСЬ, г.Минск.
    Приму Ваши замечания и предложения.
    По совету Равиля Зарипова РАЗМЕСТИЛ на файлообменнике 12.08.2019г по этой: https://mega.dp.ua/a27WmeXKwY ссылке. На этом ресурсе обещают хранить 90 дней. Интересно услышать Ваши отзывы.




  17. Like
    sinuke получил реакцию от Yarpda в Как можно обновиться в Google Play после 1 августа   
    Да, у меня.

    Я только не знаю, с чем это связано. Запрос именно на это приложение я отправлял вчера и ответа еще не получил. Но неделю назад отправлял на другие приложения (ответ я в какой-то теме публиковал).
    Но вчера на старые мои запросы пришли письма о том, решилась ли моя проблема. И вот я там еще раз написал о том, что хотелось бы получить продление, что у делфи нет компилятора андройд-64, что будет он только осенью или зимой и что выпущу обновление в течение 2-х недель после появления компилятора. Утром пришел формальный ответ, что мол передадим в техническую группу и чуть что - сообщим
  18. Thanks
    sinuke получил реакцию от Татьяна в Как можно обновиться в Google Play после 1 августа   
    <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />  
  19. Thanks
    sinuke получил реакцию от Татьяна в Как можно обновиться в Google Play после 1 августа   
    Да, у меня.

    Я только не знаю, с чем это связано. Запрос именно на это приложение я отправлял вчера и ответа еще не получил. Но неделю назад отправлял на другие приложения (ответ я в какой-то теме публиковал).
    Но вчера на старые мои запросы пришли письма о том, решилась ли моя проблема. И вот я там еще раз написал о том, что хотелось бы получить продление, что у делфи нет компилятора андройд-64, что будет он только осенью или зимой и что выпущу обновление в течение 2-х недель после появления компилятора. Утром пришел формальный ответ, что мол передадим в техническую группу и чуть что - сообщим
  20. Like
    sinuke получил реакцию от qz5 в Как можно обновиться в Google Play после 1 августа   
    Да, у меня.

    Я только не знаю, с чем это связано. Запрос именно на это приложение я отправлял вчера и ответа еще не получил. Но неделю назад отправлял на другие приложения (ответ я в какой-то теме публиковал).
    Но вчера на старые мои запросы пришли письма о том, решилась ли моя проблема. И вот я там еще раз написал о том, что хотелось бы получить продление, что у делфи нет компилятора андройд-64, что будет он только осенью или зимой и что выпущу обновление в течение 2-х недель после появления компилятора. Утром пришел формальный ответ, что мол передадим в техническую группу и чуть что - сообщим
  21. Like
    sinuke получил реакцию от Евгений Корепов в Как можно обновиться в Google Play после 1 августа   
    Да, у меня.

    Я только не знаю, с чем это связано. Запрос именно на это приложение я отправлял вчера и ответа еще не получил. Но неделю назад отправлял на другие приложения (ответ я в какой-то теме публиковал).
    Но вчера на старые мои запросы пришли письма о том, решилась ли моя проблема. И вот я там еще раз написал о том, что хотелось бы получить продление, что у делфи нет компилятора андройд-64, что будет он только осенью или зимой и что выпущу обновление в течение 2-х недель после появления компилятора. Утром пришел формальный ответ, что мол передадим в техническую группу и чуть что - сообщим
  22. Like
    sinuke получил реакцию от qz5 в переход к x64?   
    Вчера утром отправил запрос, вчера же вечером получил ответ(ы):

  23. Like
    sinuke получил реакцию от qz5 в переход к x64?   
    Проверил в маркете статистику по одному своему приложению... В общем десятью процентами и не пахнет (22,6%)

  24. Like
    sinuke получил реакцию от Kitty в переход к x64?   
    Да вообще не лучше - дома все устройства с 9-м андройдом. Так что лично я вообще не знаю что делать
  25. Like
    sinuke получил реакцию от Tom1984 в [Android] Прозрачный StatusBar в RAD 10.3 Rio   
    Привет
    Вчера была выпущена финальная версия RAD Studio 10.3 Rio, в которой много нововведений для Андройд. Но вот про статусбар снова "забыли". Хотя не совсем, добавили файлик styles-v21.xml, который превносит новую материальную тему на устройствах под управлением Android 5.0 и выше вместо устаревшей Holo.
    Но все равно свойство формы SystemStatusBar так и не реализовали. Поэтому при запуске статус бар будет окрашен в унылый серый цвет (см. скриншот).

    Для того, чтобы сделать статусбар прозрачным и поместить под него содержимое формы, то достаточно сделать несколько несложных шагов:
    1. Убираем из деплоймента (Project -> Deployment) файл styles-v21.xml (можно просто снять галочку рядом с именем файла)

    2. Добавить в деплоймент проекта новый файл styles-v21.xml (styles-v21.zip) и прописать ему путь res\values-v21\

    3. В результате получится следующий вид

     
    P.S. В новом файле по сравнению со стандартным добавилась строчка <item name="android:windowTranslucentStatus">true</item>, которая и отвечает за прозрачный статусбар
    P.P.S. Чтобы определять размер статус бара, все также можно воспользоваться решеним ZuBy - http://blog.rzaripov.kz/2016/12/android-ios.html
    P.P.P.S. Тестовый проектик - StatusBar.zip
×
×
  • Создать...