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

mazayhin

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

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

  • Посещение

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

    19

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

  1. 13 часов назад, Sascha сказал:

    Вот есть .so-файл, который хочется вызывать из своего firemonkey-проекта (для Android), но как? Нужно создавать бридж?

    Можно подробную инструкцию? Спасибо

    На сколько память не изменяет, то деплоить ее, загружать как dll в Win ну и работать

  2. В 11.08.2021 в 15:46, Ingalime сказал:

    Извините, не совсем понятно с потерей фокуса. Приложение имеет службу переднего фона. Приложение может быть свернуто, но музыка все равно будет играть. Так работают все плееры и мой также. При входящем звонке хочу остановить воспроизведение. Сейчас музыка продолжает играть при разговоре по телефону.

    Думаю, что правильнее и проще всего будет добавить в приложение ресивер, и подписаться на событие входящего вызова, ну, и далее, скажем, в сервис интент отправить, или в приложение, или еще что сделать

  3. 1 час назад, Android сказал:

     Времени свободного нет, но прийти сюда покидать понты оно находится #яснопонятно

    Отвечу тем же советом-обиженку строить не стоит, и вместо надутых щек, что никто готовый проект не скинул, пойти да почитать там, а лучше попробовать, как использовать класс TSuperFileManagerForAllFolders

  4. 14 минут назад, Android сказал:

    А примерчик можно глянуть?

    Дак надо было сразу и писать: кто сделает мне файловый менеджер за спасибо?

    Нет, нельзя, времени на основной работе свободного нет, увы. Посмотри примеров на яве много, и смысл будет понятен.

    Возтми к примеру, любую shared-директорию, и иди на уровень вверх

     

  5. 45 минут назад, Delpher-X сказал:

    Здравствуйте. У меня такая проблема. 

    Пытаюсь скачать файл:
     

    
    var
    S : TMemoryStream;
    begin
    S := TMemoryStream.Create();
    IdHTTP1.Get('http://sitename.com/7UlmBU7IXHA.jpg', S);
    S.SaveToFile('/storage/emulated/0/ImageFile.jpg');
    S.Free;
    end;


    Проблема возникает на последней стадии - при сохранении файла. Android пишет, Cannot create file: '/storage/emulated/0/ImageFile.jpg'. Permission denied, то есть доступ запрещен. Но как его разрешить? Когда я устанавливаю приложение, система пишет, что никаких разрешений данная программа не требует.

    Выдать разрешения в манифесте

    Запросить при необходимости в рантайме из кода

    И путь брать через System.IOUtils

  6. В 24.12.2020 в 07:05, Delpher-X сказал:

    Вот пожалуйста, пишу код: 

    
    if FileExists ('/documents/7.doc') then
    Label1.Text := 'Файл на месте';

    Запускаю на своем устройстве, результат - ноль реакции. 

    Такого пути может и не быть, если что.

    Все производители по-разному размечают

     

    Используйте методы из IOUtils и все. Не за чем лезть в условный /

  7. 7 часов назад, Delpher-X сказал:

    Здравствуйте. Как указываются пути к каталогам и файлам в Android? Скажем, в Windows я указываю такой путь:  C:/Windows/Folder, а как это делается в Android? Особенно меня интересует, как обратиться к корневому каталогу, для создания там новой папки или файла, в Windows это C:/, или D:/ а тут как? 

    http://docwiki.embarcadero.com/RADStudio/Sydney/en/Standard_RTL_Path_Functions_across_the_Supported_Target_Platforms

  8. 34 минут назад, OnePeople сказал:
    
     if TJBuild_VERSION.JavaClass.SDK_INT > 26 then // JBuild_VERSION_CODES.JavaClass.O
      begin
        {$ifdef VER330}
        // new ways for SDK > 26 (won't be called when API < 26 anyways)
        // Создаем канал уведомления                                                       
        ServiceChannel := TJNotificationChannel.JavaClass.init(
          StringtoJString('com.radio.one'), //CHANNEL_ID
          StrToJCharSequence('Public radio Channel'),
          TJNotificationManager.JavaClass.IMPORTANCE_DEFAULT
        );
        // Получаем указатель на сервис работы с увдомлениями    
        Obj := TAndroidHelper.Context.getSystemService(
        TJContext.JavaClass.NOTIFICATION_SERVICE);
        // Выдергиваем оттуда менеджер уведомлений                                                        
        NotificationManager := TJNotificationManager.Wrap(Obj);
        // Передаем менеджеру наш канал уведомлений  
        NotificationManager.createNotificationChannel(ServiceChannel);
     // Создаем намерение с параметрами нашего приложения 
        NewIntent:= TAndroidHelper.Context.getPackageManager().getLaunchIntentForPackage(
          TAndroidHelper.Context.getPackageName());
        NewIntent.setAction(TJIntent.JavaClass.ACTION_MAIN);
        NewIntent.addCategory(TJIntent.JavaClass.CATEGORY_LAUNCHER);
        NewIntent.addFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK);
     // Создаем намерение для передачи другому приложению действия с правами нашего приложения 
        PendingIntent := TJPendingIntent.JavaClass.getActivity(
          TAndroidHelper.Context, 0, NewIntent,
          TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK
        );
       // Создаем уведомление
        ncb := TJNotificationCompat_Builder.JavaClass.init(
          TAndroidHelper.Context,
          StringToJString('com.radio.one')
        );
    // Указываем параметры уведомления
    // Заголовок уведомления                                                           
       ncb.setContentTitle(StrToJCharSequence('PublicRadio'));
       // Текст для служб специальных возможностей
      //  Начиная с выпуска L, этот текст больше не отображается на экране, но он по-прежнему полезен для служб специальных возможностей (где он служит звуковым объявлением о появлении уведомления).                                                     
       // ncb.setTicker(StrToJCharSequence('MyCommsService')); // can't remember why this is commented out to be honest
        // Иконка уведомления       
       ncb.setSmallIcon(JavaService.getApplicationInfo.icon);
            // Действие при нажатии на уведомления  
       ncb.setContentIntent(PendingIntent);
           // Действие при нажатии на уведомления  
         // Установите, является ли это "текущим" уведомлением. Текущие уведомления не могут быть отклонены пользователем, поэтому ваше приложение или служба должны позаботиться об их отмене. Они обычно используются для обозначения фоновой задачи, которой пользователь активно занят (например, воспроизведение музыки) или которая каким-то образом ожидает выполнения и поэтому занимает устройство (например, загрузка файла, операция синхронизации, активное сетевое подключение).
       ncb.setOngoing(True);
        // Выводим уведомление    
       ntf := ncb.build;

    Как то так

    Сибирь рулит )) 

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

    Добавила сервис в проект с BASS. Все работает как надо. Уже час музыка играет при свернутом приложении и заблокированном экране. ✌️

    P.S.

    А как можно службу остановить?

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

  10. 12 минут назад, Ingalime сказал:

    Просто добавить комментарии к строкам. Например зачем там

    ExtraData := TAndroidHelper.JStringToString

    и т.д.

    А, ок, понял. Но сейчас уже ухожу с работы от компа... Если никто не распишет, может, на выходных, или уже в понедельник, распишу.

    Да, и код сервиса "выдран" от куда то, я б, честно, его поменял немного, но ничего.

    По поводу ExtraData - при запуске сервиса предполагается какое-то дальнейшее действие, вот оно в эту дату и прилетает при запуске, и дальше автор что-то с этим значением делает

  11. 28 минут назад, Ingalime сказал:

    Создано тест приложение и сервис с кодом выше. Запустилось. Появился в шторке значок приложения. Свертываем приложение с экрана и блокируем экран. Минут через 20 будим телефон. Значок в шторке на месте. Похоже работает...

    P.S.

    Просьба кто знает java и имеет время, "разбавить" код сервиса подробными комментариями, а то не совсем понятно что там и как. Спасибо.

    Что значит "разбавить код сервиса комментариями"? Там же все и так на Delphi. Или имеется в виду, паралельно delphi написать в комментарии тот же код на Java?

  12. 22 часов назад, Сергей Сергеев сказал:

     

     

     

    тоже понадобилось, я так понимаю они приходят в Хедерах? их как то с TWebBrowser можно считать  ( Андроид)

    {$IFDEF ANDROID}
    uses Androidapi.Helpers,
         Androidapi.JNI.Webkit;
    (...)
    var CookieManager: JCookieManager;
        Cookie: string;
    begin
      CookieManager := TJCookieManager.JavaClass.getInstance;
      Cookie := JStringToString(CookieManager.getCookie(StringToJString(WebBrowser1.URL)));
      CookieManager := nil;
    end;

    Результат - строка формата HTTP-заголовка Cookie - PHPSESSID=298zf09hf012fh2; csrftoken=u32t4o3tb3gg43; _gat=1

    Так же, через менеджер для URL можно установить свои куки, или удалить их.

  13. 5 часов назад, Сергей Сергеев сказал:

    вроде бы читал в ИОС нет кейстор ( вернее маленький в процессоре).. ваш пример только под Андроид?

    Про IOS не скажу ничего.

    Это только для андроида. Без сторонних библиотек, просто обертки к api. Генерация ключей, шифрование и прочее то же все родное

     

  14. На форуме была тема про кейстор, с скидывал пример работы с ним (плохенький, но работает)

    Для входа по пин коду:

    Генерируйте ключ, ставьте пин на него, храните в кейсторе, гугл вроде как гарантирует неизвлекаемость ключа. Шифруйте данные авторизации и храните их да хоть в загрузках. Без ключа они бесполезны. Далее пытайтесь расшифровать и работать с ними. Не расшифровались-не тот ключ. Нет доступа к ключу-не тот пин.

    Если следовать закону, то не удивлюсь, что шифрование должно быть ГОСТ..

  15. 13 минут назад, Олег Киреев сказал:

    СпасиБо с этим разобрался. 

    А ещё подскажите пожалуйста почему зависает телефон когда я отправляю файл так:

    //Поделится БД
    procedure TForm_glavn.ButtonПоделитсяБДClick(Sender: TObject);
    begin
    if FileExists(TPath.GetDownloadsPath+'/DB_BOKA.db3') then
    begin
       Try
       ShareFile(TPath.GetDownloadsPath+'/DB_BOKA.db3', 'Это файл DB_BOKA.db3 из приложения БОКА.');
       Sleep(100);
       ShowMessage('Отправлено.');
       Except
       ShowMessage('Не отправлено.');
       End;
    end else ShowMessage('Файл '+TPath.GetDownloadsPath+'/DB_BOKA.db3'+' не найден.');
    end;

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

    С Уважением. Олег Киреев.

    Возможно? это связано с восстановлением подключения к БД? На момент от правки она закрыта?

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

  16. 47 минут назад, Олег Киреев сказал:

    СпасиБО. Буду знать.

    Но я до этого  попробовал задеплоить сюда .\assets\Download\ и приложение нашло его так:

    //поиск файла
    procedure TForm_glavn.Button10Click(Sender: TObject);
    var
      FileToFind: string;
    begin
      FileToFind := FileSearch('/storage/emulated/0/Android/data/com.embarcadero.BOKA/files/Download/DB_BOKA.db3', GetCurrentDir);
      if FileToFind = '' then
        ShowMessage('Не смог найти: ' + 'DB_BOKA.db3' + '.')
      else
        ShowMessage('Нашёл в каталоге ' + FileToFind + '.');
    end;

    На сколько знаю, на разных устройствах путь может отличаться.

    Посмотрите статью https://delphifmandroid.blogspot.com/2014/02/deployment-manager.html

    Там описано про пути деплоя, и как потом найти на устройстве, используя System.IOUtils

  17. 6 минут назад, Олег Киреев сказал:

    Дело в том что этот файл задеплоин так:

    1536490910__.thumb.jpg.9a7af7cf0712816bf9a36b24858c15c0.jpg.

    Я пытаюсь узнать действительно ли он там вот так:

    //поиск файла
    procedure TForm_glavn.Button10Click(Sender: TObject);
    var
      FileToFind: string;
    begin
      FileToFind := FileSearch('.\assets\external\DB_BOKA.db3', GetCurrentDir);
      if FileToFind = '' then
        ShowMessage('Не смог найти: ' + 'DB_BOKA.db3' + '.')
      else
        ShowMessage('Нашёл в каталоге ' + FileToFind + '.');
    end;

    Сообщение показывает "Не смог найти".

    Подскажите пожалуйста что здесь не так?

    С Уважением. Олег Киреев.

    Олег, если файл деплоится в external, то путь к нему надо получать так:

    TPath.Combine(TPath.GetSharedDocumentsPath, 'DB_BOKA.db3')
  18. В 16.10.2019 в 02:29, Светлана сказал:

    А если я ловлю ошибку иногда "Exception class DOMException with message 'Microsoft MSXML is not installed'" - это значит, что то типа потоку не доступна та или иная lib для выполнения?

    Еще, причем, если будете запускать не только на Windows, сразу выберете кросплатформенного поставщика (DOM Vendor) ADOM XML v4

    Тогда не надо будет вызывать CoInitialize, который и работает только для Windows

  19. 14 часов назад, Aleks133 сказал:

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

    Если есть чем помочь по теме,буду премного благодарен.

    Ну поиск по форуму не работает...

    Жевали на 3 страницы

     

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