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

AppTethering не отправляет поток данных в Android-приложение


Delpher-X

Вопрос

Доброе время суток. У меня есть код, который отправляет данные, в частности файлы, из одного приложения в другое, используя технологию AppTethering. Вот код, который отправляет данные: 

var
ImageToStream : TMemoryStream;
begin
ImageToStream := TMemoryStream.Create;
ImageToStream.LoadFromFile('Здесь находится путь к файлу');
ImageToStream.Position := 0;
TetheringAppProfile1.Resources.FindByName('ImageTransfer').Value := ImageToStream;
ImageToStream.Free;
end;

А вот который принимает: 

procedure TForm1.TetheringAppProfile1Resources3ResourceReceived(
  const Sender: TObject; const AResource: TRemoteResource);
var
GetImage : TMemoryStream;
begin
GetImage := TMemoryStream.Create;
GetImage.Position := 0;
GetImage.LoadFromStream(AResource.Value.AsStream);
ImageViewer1.Bitmap.LoadFromStream(GetImage);
GetImage.Free;
end;

Пока передача данных идет между двумя Windows-приложениями, все работает прекрасно. Однако, когда я пытаюсь отправить данные от Windows-приложения в Android-приложение, которое исполняется на смартфоне, подключенном к компьютеру через USB-шнур, данные не проходят.  

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Да, что самое интересное, данные строкового типа передаются нормально. То есть, когда я передаю данные типа 'string', они прекрасно доставляются и туда и обратно. А вот когда пытаюсь передать Stream - данные не приходят. 

Ссылка на комментарий
  • 0

ImageToStream.Free;
убери может оно гасится раньше отправки

var
ImageToStream : TMemoryStream;
begin
ImageToStream := TMemoryStream.Create;
ImageToStream.LoadFromFile('Здесь находится путь к файлу');
ImageToStream.Position := 0;
TetheringAppProfile1.Resources.FindByName('ImageTransfer').Value := ImageToStream;
end;
А вот который принимает: 

procedure TForm1.TetheringAppProfile1Resources3ResourceReceived(const Sender: TObject; const AResource: TRemoteResource);
begin
  ImageViewer1.Bitmap.LoadFromStream(AResource.Value.AsStream);
end;

 

Изменено пользователем Slym
Ссылка на комментарий
  • 0
11 часов назад, Slym сказал:

ImageToStream.Free;
убери может оно гасится раньше отправки

Вряд ли. Тогда бы не работало в любом случае. А так, когда оба приложения на одном Windows-хосте, все работает прекрасно, когда дело доходит до передачи потока в приложение на гаджете - не пашет. 

Ссылка на комментарий
  • 0

Проверьте пути к файлу 

procedure TForm1.TetheringAppProfile1Resources3ResourceReceived(
  const Sender: TObject; const AResource: TRemoteResource);
var
GetImage : TMemoryStream;
begin
GetImage := TMemoryStream.Create;

GetImage.LoadFromStream(AResource.Value.AsStream);
GetImage.Position := 0;
ImageViewer1.Bitmap.LoadFromStream(GetImage);
GetImage.Free;
end;

 

Ссылка на комментарий
  • 0
В 05.03.2021 в 18:47, OnePeople сказал:

Проверьте пути к файлу 

С путями к файлу все в порядке. И тот код который вы процитировали - он в любом случае, работает уже с файлом переданным в потоке. 

Ссылка на комментарий

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Похожий контент

    • Автор Delpher-X
      Итак, у меня была Delphi 10.3 Community Editon, которой я пользовался год. Затем, бесплатная лицензия истекла и я поставил себе новую Community Edition - на этот раз, версию 10.4. Однако она оказалась полным отстоем - ничего нового и интересного в ней нет, а вот целая куча нужных вещей оказалась выпилена (включая то, что многие старые компоненты больше не работают). 
      А посему у меня вопрос - как реанимировать установленную у меня Delphi 10.3, как продлить ее Community Edition лицензию? 
    • Автор Delpher-X
      Итак, я установил себе новую Delphi 10.4 CE, так как у старой Delphi 10.3 CE кончился годовой срок. Однако, у меня возникла проблема с разработкой, точнее - с компиляцией приложений для Android. Дело в том, что в поставке новой Embarcadero RAD 10.4 отсутствует AVD Manager (эмулятор для Android), что вы и можете видеть на втором скрине. А когда я пытаюсь использовать старый, из набора Embarcadero RAD 10.3, компиляция вылетает с ошибкой, которую вы можете видеть на первом скрине.   


    • Автор Yaugenka
      В компанию требуется опытный разработчик, который готов присоединиться к команде для разработки крупного проекта в области Blockchain-технологий, распределенных систем и криптографии. Зп от 150 000 до 200 000 ₽. Удаленная работа.

      Обязанности:

      - Работа с криптографическими алгоритмами, blockchain технологиями
      - Разработка программного обеспечения на Delphi
      - Участие в разработке блокчейн проекта нового поколения
      - Разработка, поддержка и развитие серверных функций системы на основе Blockchain
      - Отладка, анализ производительности оптимизация ПО;
      - Проектирование и разработка архитектуры разрабатываемых решений;

      Требования:

      - Опыт разработки ПО от 5 лет;
      - Плюс: Понимание принципов работы публичных и закрытых блокчейнов (Ethereum/Solidity, Bitcoin, Quorum)
      - Знание принципов ООП и шаблонов проектирования;
      - Опыт работы с системами контроля версий ПО (Git)
      - Уверенное владение языком программирования Delphi, средой разработки embarcadero
      - Знание английского языка на уровне чтения технической литературы;

      Условия:

      - Участие в интересном и масштабном проекте
      - Дружный коллектив;
      - Возможности развития и обучения

      Бонусы
      Бонусы по итогам года.

      О нас:
      Мы компания новаторов и энтузиастов в сфере блокчейн и криптовалют.
      https://career.habr.com/vacancies/1000074707

      Контакт для обратной связи: hr@relictum.pro
    • Автор Delpher-X
      Итак, как добавить в приложение проверку наличия соединения с Интернетом? Я всегда пользовался кодом: 
      var NetControl : DWORD; begin NetControl := INTERNET_CONNECTION_MODEM + INTERNET_CONNECTION_LAN + INTERNET_CONNECTION_PROXY; Result := InternetGetConnectedState(@NetControl, 0); end; Однако здесь он явно не подходит, так как предназначен для Windows, а меня интересует Android. Я пробовал использовать компонент IdIPWatch, но он все время верещал о том что Интернета нет, несмотря на то что смартфон был вполне подключен к сети. 
    • Автор Delpher-X
      Вопрос: как спрятать главную форму приложения в FMX? В VCL это делается просто - Project>View Source>вписываешь в открывшемся окне Application.ShowMainForm := False, однако в FMX такой фокус не прокатывает, там просто свойства такого нет - ShowMainForm. Как же быть? 
    • Автор Delpher-X
      Пытаюсь программно добавить в своем проекте компонент IdFTP: 
      FTPBot : TIdFTP; FTPBot := TIdFTP.Create(); FTPBot.Name := 'FTPGhost'; FTPBot.Passive := True; FTPBot.Host := ''; FTPBot.Username := ''; FTPBot.Password := ''; Код компилируется нормально. 
      Однако, когда я пытаюсь обратиться к свойству TransferType полученного объекта: 
      FTPBot.TransferType.ftBinary; Программа при компиляции вылетает с ошибкой, утверждает что нельзя так писать. В чем дело? 
    • Автор Simons Cat
      У меня среда программирования rad studio Delphi 10.4.2. Собственно ищу совета как отправить и получить ответ на запрос USSD.
      Нашел в интернете единственный пример более или менее который похож на правду.
      Привел его к виду нормальному виду, но не хватает знаний как передать функцию CallBack.
      procedure TForm7.Button6Click(Sender: TObject); var Temp:Jstring; ResponceCallBack: JTelephonyManager_UssdResponseCallback; handler: JHandler; begin     TM :=TJTelephonyManager.Create;   handler := TJHandler.Create;   ResponceCallBack := TJTelephonyManager_UssdResponseCallback.Wrap(   TAndroidHelper.Context.getSystemService(TJContext.JavaClass.TELEPHONY_SERVICE));    TM.sendUssdRequest(StringToJString('*100#'), ResponceCallBack,handler);   end;  
      На java делается вот так. Не знаю как этот код переделать в delphi.
      TelephonyManager =  telephonyManager(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);     Handler handler = new Handler();     TelephonyManager.UssdResponseCallback callback = new TelephonyManager.UssdResponseCallback() {         @Override         public void onReceiveUssdResponse(TelephonyManager telephonyManager, String request, CharSequence response) {             super.onReceiveUssdResponse(telephonyManager, request, response);             Log.e("ussd",response.toString());           }           @Override         public void onReceiveUssdResponseFailed(TelephonyManager telephonyManager, String request, int failureCode) {             super.onReceiveUssdResponseFailed(telephonyManager, request, failureCode);             Log.e("ussd","failed with code " + Integer.toString(failureCode));         }     };       try {            Log.e("ussd","trying to send ussd request");            telephonyManager.sendUssdRequest("*123#",                     callback,                     handler);         }catch (Exception e){                 String msg= e.getMessage();             Log.e("DEBUG",e.toString());             e.printStackTrace();         }  
    • Автор Delpher-X
      Я обратил внимание, что если в VCL цвет формы, а также некоторых других компонентов можно менять, то в FMX это сделать нельзя - доступен только дефолтно-серый, во всяком случае, при компиляции под Android. Есть ли какие-то способы это поправить? 
    • Автор Delpher-X
      У меня есть следующий код, который передает данные из потока в объект типа TStrings: 
      var F : TMemoryStream; S : TStrings; begin F := TMemoryStream.Create; S := TStringList.Create; F.LoadFromFile('C:/File.jpg'); S.LoadFromStream(F); Из TMemoryStream в TStrings все передается нормально. Однако - как обратно? Как снова преобразовать объект TString в поток данных, дабы снова можно было бы сохранить его в полноценный файл? 
    • Автор slav_z
      Все разработчики при работе с FMX рано или поздно сталкиваются с одной и той же проблемой: необходимо исключить "случайное" срабатывание нажатий элементов внутри скроллбокса во время его скроллинга. Идут годы, а решения так и нет. Давайте попробуем это исправить. Поехали!
      Запускаем IDE, создаем новый проект, кидаем на форму TVertScrollBox и на него чего-нибудь побольше... запускаем на мобильном устройстве, пытаемся скроллировать,

      получаем проблемы в виде срабатывания разных событий типа OnClick элементов.
      Решение состоит в том, чтобы сделать элементы "невидимыми" для событий связанных с действиями пользователя с экраном во время скроллинга.
      Делаем следующее:

      Все. Переносим код в базовую форму, делаем его более гибким, убираем все те костыли, которые мы уже успели сделать ранее...
      Удачи!
      https://github.com/slav-libx/scroll-click.git
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...