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

zheka1980

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

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

  • Посещение

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

  1. Цитата

     

    	  TBytes FData;
    
    FData=Socket->ReceiveData(100);
     len_rx=FData.Length;
    			Memo1->Lines->Add(len_rx);
    				Memo1->Lines->Add(TEncoding::UTF8->GetString(FData));
    
    			len_rx=0;
     if(len_rx == 0)
      {
    
    	  TArray__1<System::Byte> * buffer = new TArray__1<System::Byte>;
    	 buffer->set_length(6);
    		(*buffer)[0] = 'r';
    		(*buffer)[1] = 'e';
    		(*buffer)[2] = 's';
    		(*buffer)[3] = 'e';
    		(*buffer)[4] = 't';
    		(*buffer)[5] = 0x0D;
    	Socket->SendData(*buffer);
    	delete buffer;
      }

    Вышеприведенный код запускается по таймеру каждую секунду - командой "reset" целевое устройство отправляется в перезагрузку, после чего отвечает, мол здесь я.

    То есть вначале проверяется нет ли чего в буфере приема (не ответило ли целевое устройство), а если ответа нет, команда на ресет подается повторно.

    То что len_rx принудительно сбрасывается в ноль - не обращайте внимания, это временно для отладки.

     

    Так вот, что меня смущает - количество байт в FData, почему то всегда равно размеру buffer

    Я было подумал, что где-то я эти переменные приравниваю друг к другу - ан нет. То, что оказывается в FData, является правильными данными, то есть тем, что шлет целевое устройство в ответ.

    В чем причина? И чем отлиючаются ReadData и ReceiveData? Это буфера или нет? Как они работают? Что-то не густо информации в интернете.

     

    Вот дока http://docwiki.embarcadero.com/Libraries/Berlin/en/System.Bluetooth.TBluetoothSocket.ReadData

    но она как-то не сильно помогает.

     

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

    У меня до этого была какая-то библиотека на Java, так она вообще работала только лишь с сопряженными устройствами. Что и сбило меня с толку.

    Попробовал без сопряжения- сокет создается, данные гонятся.

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

  3. Господа, есть вопрос.

    Работает у меня код, который ищет блютус-устройства и формирует из них список (ComboBox). Пользователь выбирает из комбобокса нужное устройство, при выборе автоматом запускается функция подключения. Если устройство сопряжено, то создается сокет, а дальше дело техники.

    Если же устройство не сопряжено, то я вызываю

     

       if (BTDevice->IsPaired==0) Bluetooth1->Pair(BTDevice);

    что приводит к появлению диалогового окна, но не моей программы, а самой операционной системы Андроид, которое предлагает ввести пароль.

    Вопрос -  как дальше вести себя моей программе? Окно операционной системы самостоятельное, программа же идет дальше.

    Первая мысль - по таймеру раз в пару сот миллисекунд проверять BTDevice->IsPaired и как только оно станет положительным, создавать сокет.

    А если попытка сопряжения будет неудачной, скажем, пароль кривой? Как программе понять, что пора бы прекратить проверять BTDevice->IsPaired, а подготовиться к повторной попытке сопряжения. Иначе после первой же неудачной попытки осуществить сопряжение, программа уйдет в транс.

     

  4.   WebBrowser1.Navigate(TPath.GetPublicPath+'Tesseract.gif');
    

    Так я пытаюсь запустить локальный файл. Не получается, пишет, что не может открыть файл. Путь указан правильный, н оначинается с http:

    Как мне направить webbrowser по нужному пути?

  5. Спасибо, я уже в принципе разобрался. Почти разобрался.

    ВОт такой код

    procedure TForm7.btnOpenPDFClick(Sender: TObject);
    const
      SAMPLE_PDF_FILENAME = 'example.pdf';
    var
      Uri: Jnet_Uri;
      OpenLinkIntent: JIntent;
      PDFFileName: string;
      sr:TSearchRec;
      bchars, Tws:TSysCharSet;
      Intent: JIntent;
    begin
      PDFFileName :=TPath.Combine(TPath.GetSharedDocumentsPath, SAMPLE_PDF_FILENAME);  { Внутренний доступ}
      Label1.Text:=PDFFileName;
    
    	if (FindFirst(TPath.GetDocumentsPath+'/*.pdf', faAnyFile, sr) = 0) then
    	begin
    		Memo1.Lines.Add(sr.Name);
    
    	  while (FindNext(sr) = 0) do
    		 begin
    			Memo1.Lines.Add(sr.Name);
    		 end;
    	end;
    	FindClose(sr);
           Intent := TJIntent.Create;
      Intent.setAction(TJIntent.JavaClass.ACTION_VIEW);
      Intent.setDataAndType(StrToJURI('file:'+PDFFileName), StringToJString('application/pdf'));
      try
        SharedActivity.startActivity(Intent);
      except on E: Exception do
        ShowMessage('Не удалось открыть PDF. В системе нет доступных приложения для просмотра pdf');
     end;
    end;

    Вот такой код открывает файлы, но только если они в SharedDocumentsPath.

    Если пытаюсь открывать в DocumentsPath - не получается.

     

    Пытаюсь идти обратным путем - добавляю файлы в проект, запускаю Deployment, меняю assets\internal на assets - ни хрена.... При заливе проекта файлы в DocumentsPath не копируются.

     

    Мне нужно, чтобы человек скачал программу, содержащуюв себе PDFки, установил ее, и мог из программы эти PDF открыть.  Возможно ли вообще в принципе сделать так, чтобы не скачивать PDF отдельно и не записыват в специаьную папку?

     

  6. Я просто думал, что могу не только программой получить доступ, но и проводником посмотреть.

    К слову - интересная штука, я просканировал папку пользователькую - в мемо имена загруженных файлов выводятся, то есть они скопировались и обнаруживаются.

    Но вот не открывается PDF

     

    Цитата
    
    procedure TForm7.btnOpenPDFClick(Sender: TObject);
    const
      SAMPLE_PDF_FILENAME = 'example.pdf';
    var
      Uri: Jnet_Uri;
      OpenLinkIntent: JIntent;
      PDFFileName: string;
      sr:TSearchRec;
      bchars, Tws:TSysCharSet;
      Intent: JIntent;
    begin
      PDFFileName :=TPath.Combine(TPath.GetDocumentsPath, SAMPLE_PDF_FILENAME);  { Внутренний доступ}
      Label1.Text:=PDFFileName;
    
    	if (FindFirst(TPath.GetDocumentsPath+'/*.pdf', faAnyFile, sr) = 0) then
    	begin
    		Memo1.Lines.Add(sr.Name);
    
    	  while (FindNext(sr) = 0) do
    		 begin
    			Memo1.Lines.Add(sr.Name);
    		 end;
    	end;
    	FindClose(sr);
    
      ///
      ///
      ///
      ///
            Intent := TJIntent.Create;
      Intent.setAction(TJIntent.JavaClass.ACTION_VIEW);
      Intent.setDataAndType(StrToJURI(PDFFileName), StringToJString('application/pdf'));
      SharedActivity.startActivity(Intent);
                                           ///
    
    //  Uri := StrToJURI(PDFFileName);
      // Формируем намерение об открытии файла в стандартном приложении
    //  OpenLinkIntent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_VIEW, Uri);
      // Устанавливаем тип данных
    //  OpenLinkIntent.setType(StringToJString('application/pdf'));
    //  OpenLinkIntent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_CLEAR_TOP);
      // Запускаем приложение и передаем ему наше намерение
    //  try
    //    SharedActivity.startActivity(OpenLinkIntent);
    //  except on E: Exception do
    //    ShowMessage('Не удалось открыть PDF. В системе нет доступных приложения для просмотра pdf');
      //end;
    end;

     

     

  7. Цитата

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

    Вот! Как раз этого у меня и нет. У меня несколько приложений и когда я пытаюсь открыть файл из диспетчера - вопрос о программе задается.

    А в мой программе - нет. Пишет - не удалось открыть файл.

  8. А у меня вообще что-то не получается...

    Пишет - не получается открыть файл.

    Я думал какие-то проблемы с папками - скинул PDF в проверенную папку - Downloads, написал кусок кода, который в этой же папке роется и формирует список файлов, чтобы понять, что программа в папку лезет..

     

     

    procedure TForm7.btnOpenPDFClick(Sender: TObject);
    const
      SAMPLE_PDF_FILENAME = '978.pdf';
    var
      Uri: Jnet_Uri;
      OpenLinkIntent: JIntent;
      PDFFileName: string;
      sr:TSearchRec;
      bchars, Tws:TSysCharSet;
    begin
    PDFFileName :=TPath.Combine(TPath.GetSharedDownloadsPath, SAMPLE_PDF_FILENAME);  { Внутренний доступ}
      Label1.Text:=PDFFileName;
    
    
    	if (FindFirst(TPath.GetSharedDownloadsPath+'/*.pdf', faAnyFile, sr) = 0) then
    	begin
    		Memo1.Lines.Add(sr.Name);
    
    	  while (FindNext(sr) = 0) do
    		 begin
    			Memo1.Lines.Add(sr.Name);
    		 end;
    	end;
    	FindClose(sr);
    
    
      Uri := StrToJURI(PDFFileName);
      // Формируем намерение об открытии файла в стандартном приложении
      OpenLinkIntent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_VIEW, Uri);
      // Устанавливаем тип данных
      OpenLinkIntent.setType(StringToJString('application/pdf'));
      OpenLinkIntent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_CLEAR_TOP);
      // Запускаем приложение и передаем ему наше намерение
      try
        SharedActivity.startActivity(OpenLinkIntent);
      except on E: Exception do
        ShowMessage('Не удалось открыть PDF. В системе нет доступных приложения для просмотра pdf');
      end;
    end;

    Что у меня не так?

  9. Господа, пишу в Embarcadero DELPHI

     

    Вот проект, который открывает PDF по нажатию кнопки, по определенному адресу.

    А я хочу чтобы этот PDF поставлялся с программой.

    Я добавил в проект файл 222.pdf. Залил программу. Рылся в памяти телефона - нет такого файла.

     

    Что делать?

    OpenPDF.rar

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